deason 4 vuotta sitten
commit
2ff30a371e
67 muutettua tiedostoa jossa 3837 lisäystä ja 0 poistoa
  1. 11 0
      .gitignore
  2. 112 0
      nginx/dev-192.168.10.39/nginx.conf
  3. 2 0
      nginx/dev-192.168.10.39/sites/block_ips.conf
  4. 81 0
      nginx/dev-192.168.10.39/sites/http80.conf
  5. 202 0
      nginx/dev-192.168.10.39/sites/https443.conf
  6. 27 0
      nginx/dev-192.168.10.39/ssl/current.key
  7. 62 0
      nginx/dev-192.168.10.39/ssl/current.pem
  8. 59 0
      nginx/dev-192.168.10.39/ssl/ea100/cert.pem
  9. 27 0
      nginx/dev-192.168.10.39/ssl/ea100/key.pem
  10. 124 0
      nginx/prod-192.168.1.60/nginx.conf
  11. 2 0
      nginx/prod-192.168.1.60/sites/block_ips.conf
  12. 117 0
      nginx/prod-192.168.1.60/sites/http80.conf
  13. 11 0
      nginx/prod-192.168.1.60/sites/http8000.conf
  14. 9 0
      nginx/prod-192.168.1.60/sites/http8007.conf
  15. 9 0
      nginx/prod-192.168.1.60/sites/http8020.conf
  16. 50 0
      nginx/prod-192.168.1.60/sites/http8700.conf
  17. 29 0
      nginx/prod-192.168.1.60/sites/http8858.conf
  18. 10 0
      nginx/prod-192.168.1.60/sites/http8898.conf
  19. 38 0
      nginx/prod-192.168.1.60/sites/http8900.conf
  20. 187 0
      nginx/prod-192.168.1.60/sites/https443.conf
  21. 97 0
      nginx/prod-192.168.1.60/sites/https8878.conf
  22. 27 0
      nginx/prod-192.168.1.60/ssl/current.key
  23. 62 0
      nginx/prod-192.168.1.60/ssl/current.pem
  24. 112 0
      nginx/test-192.168.1.91/nginx.conf
  25. 2 0
      nginx/test-192.168.1.91/sites/block_ips.conf
  26. 81 0
      nginx/test-192.168.1.91/sites/http80.conf
  27. 202 0
      nginx/test-192.168.1.91/sites/https443.conf
  28. 27 0
      nginx/test-192.168.1.91/ssl/current.key
  29. 62 0
      nginx/test-192.168.1.91/ssl/current.pem
  30. 59 0
      nginx/test-192.168.1.91/ssl/ea100/cert.pem
  31. 27 0
      nginx/test-192.168.1.91/ssl/ea100/key.pem
  32. 10 0
      pom.xml
  33. 90 0
      upgrade-201909/basic.sql
  34. 77 0
      upgrade-201909/examwork.sql
  35. 24 0
      upgrade-201909/marking.sql
  36. 200 0
      upgrade-201909/oe_sync.sql
  37. 53 0
      upgrade-201909/question.sql
  38. 19 0
      upgrade-201909/task.sql
  39. 75 0
      upgrade-201911/examwork.sql
  40. 24 0
      upgrade-201911/marking.sql
  41. 76 0
      upgrade-201911/oe.sql
  42. 23 0
      upgrade-202001/baisc.sql
  43. 8 0
      upgrade-202001/examwork.sql
  44. 59 0
      upgrade-202001/nginx变化.txt
  45. 46 0
      upgrade-202001/oe-admin.sql
  46. 152 0
      upgrade-202001/oe-student.sql
  47. 113 0
      upgrade-202001/oe-task.sql
  48. 28 0
      upgrade-202001/question.sql
  49. 30 0
      upgrade-202001/备注.txt
  50. 30 0
      upgrade-202001/阿里云账号配置.txt
  51. 65 0
      upgrade-202005/mysql脚本.sql
  52. 7 0
      upgrade-202005/参数配置.txt
  53. 23 0
      upgrade-202006/basic.sql
  54. 9 0
      upgrade-202007/Nginx变更.txt
  55. 78 0
      upgrade-202007/about.txt
  56. 5 0
      upgrade-202007/其它.txt
  57. 417 0
      upgrade-202007/数据库变更.txt
  58. 61 0
      upgrade-202007/离线文件数据切割/config/application.properties
  59. 1 0
      upgrade-202007/离线文件数据切割/config/classpath.location
  60. BIN
      upgrade-202007/离线文件数据切割/offlineDataCut/examcloud-oe-tool.zip
  61. 2 0
      upgrade-202007/离线文件数据切割/使用说明.txt
  62. 13 0
      upgrade-202007/菜单变更.txt
  63. 30 0
      upgrade-202007/配置变更.txt
  64. 4 0
      upgrade-202011/about.txt
  65. 41 0
      upgrade-202011/数据库变更.txt
  66. 8 0
      upgrade-202011/菜单变更.txt
  67. 9 0
      upgrade-202011/配置变更.txt

+ 11 - 0
.gitignore

@@ -0,0 +1,11 @@
+*.class
+.project
+.classpath
+.settings
+target/
+.idea/
+*.iml
+*.log
+*.class
+*.war
+*.ear

+ 112 - 0
nginx/dev-192.168.10.39/nginx.conf

@@ -0,0 +1,112 @@
+
+user root;
+worker_processes auto;
+worker_cpu_affinity auto;
+worker_rlimit_nofile 65535;
+
+events {
+	worker_connections 65535;
+	accept_mutex off;
+}
+
+http {
+	include mime.types;
+	default_type application/octet-stream;
+	sendfile on;
+
+
+	# log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+	# '$status $body_bytes_sent "$http_referer" '
+	# '"$http_user_agent" "$http_x_forwarded_for"';
+	# access_log  logs/access.log  main;
+	access_log off;
+
+
+	underscores_in_headers on;
+	tcp_nopush on;
+	client_max_body_size 100m;
+	keepalive_timeout 3600;
+	proxy_read_timeout 3600;
+	gzip on;
+	gzip_min_length 1k;
+	gzip_comp_level 4;
+	gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
+	gzip_vary on;
+
+	# =====================================================================
+
+	upstream basic {
+		server 192.168.10.39:8000;
+	}
+
+	upstream examwork {
+		server 192.168.10.39:8001;
+	}
+
+	upstream question-for-student {
+		server 192.168.10.39:8008;
+	}
+
+	upstream question-for-admin {
+		server 192.168.10.39:8008;
+	}
+
+	upstream oe-student {
+		server 192.168.10.39:8003;
+	}
+
+	upstream oe-admin-for-admin {
+		server 192.168.10.39:8013;
+	}
+
+	upstream oe-admin-for-student {
+		server 192.168.10.39:8013;
+	}
+
+	upstream oe-task {
+		server 192.168.10.39:8002;
+	}
+
+	upstream ws {
+		server 192.168.10.39:8010;
+	}
+
+	upstream marking {
+		server 192.168.10.39:8004;
+	}
+
+	upstream logic-marking {
+		server 192.168.10.39:8005;
+	}
+
+	upstream exchange {
+		server 192.168.10.39:8007;
+	}
+
+	upstream bridge {
+		server 192.168.10.39:8020;
+	}
+
+	upstream app-api {
+		server 192.168.10.39:8090;
+	}
+
+	upstream task {
+		server 192.168.10.39:8011;
+	}
+
+	upstream print {
+		server 192.168.10.39:8009;
+	}
+
+	upstream reports {
+		server 192.168.10.39:8015;
+	}
+
+	# =====================================================================
+
+	#include sites/http80.conf;
+	include sites/https443.conf;
+	include sites/block_ips.conf;
+
+}

+ 2 - 0
nginx/dev-192.168.10.39/sites/block_ips.conf

@@ -0,0 +1,2 @@
+
+# deny 106.6.174.0/24;

+ 81 - 0
nginx/dev-192.168.10.39/sites/http80.conf

@@ -0,0 +1,81 @@
+server {
+	listen 80;
+	charset utf-8;
+	error_page 404 /40x.html;
+
+
+	location = / {
+		rewrite / /admin/ last;
+	}
+
+	location = /admin {
+		rewrite /admin /admin/ last;
+	}
+
+	location ^~ /admin/ {
+		alias /home/admin/project/examcloud/static-new/admin/dist/;
+		try_files $uri $uri/ /admin/index.html;
+	}
+
+	location ^~ /admin/js/ {
+		alias /home/admin/project/examcloud/static-new/admin/dist/js/;
+		try_files $uri $uri/ =404;
+	}
+
+	location = /oe-web {
+		rewrite /oe-web /oe-web/ last;
+	}
+
+	location ^~ /oe-web/ {
+		alias /home/admin/project/examcloud/static-new/oe-web/dist/;
+		try_files $uri $uri/ /oe-web/index.html;
+	}
+
+	location ^~ /oe-web/js/ {
+		alias /home/admin/project/examcloud/static-new/oe-web/dist/js/;
+		try_files $uri $uri/ =404;
+	}
+
+	# location ~* (js|css|img|fonts|models) {
+	#	root /home/admin/project/examcloud/static-new/oe-web/dist/;
+	# }
+
+	location = /oe-wap {
+		rewrite /oe-wap /oe-wap/ last;
+	}
+
+	location ^~ /oe-wap/ {
+		alias /home/admin/project/examcloud/static-new/oe-wap/dist/;
+		try_files $uri $uri/ /oe-wap/index.html;
+	}
+
+	location = /photo-upload {
+		rewrite /photo-upload /photo-upload/ last;
+	}
+
+	location ^~ /photo-upload/ {
+		alias /home/admin/project/examcloud/static-new/photo-upload/dist/;
+		try_files $uri $uri/ /photo-upload/index.html;
+	}
+
+	location ^~ /electron-config/ {
+		alias /home/admin/project/examcloud/static-new/electron-config/;
+	}
+
+	location ^~ /downloads/ {
+		alias /home/admin/project/examcloud/static-new/downloads/;
+	}
+
+	location ^~ /oe/facepp_api {
+		proxy_pass https://api-cn.faceplusplus.com/facepp/v3;
+	}
+
+	location ^~ /jenkins {
+		proxy_pass http://localhost:9000/jenkins;
+	}
+
+	location ^~ /resource.js {
+		proxy_pass http://basic/resource.js;
+	}
+
+}

+ 202 - 0
nginx/dev-192.168.10.39/sites/https443.conf

@@ -0,0 +1,202 @@
+server {
+	listen 443 ssl;
+	charset utf-8;
+	error_page 404 /40x.html;
+
+	ssl_certificate ssl/ea100/cert.pem;
+	ssl_certificate_key ssl/ea100/key.pem;
+
+	ssl_session_cache	shared:SSL:1m;
+	ssl_session_timeout	5m;
+	ssl_ciphers	HIGH:!aNULL:!MD5;
+	ssl_prefer_server_ciphers on;
+
+
+	location = / {
+		rewrite / /admin/ last;
+	}
+
+	location = /admin {
+		rewrite /admin /admin/ last;
+	}
+
+	location ^~ /admin/ {
+		alias /home/admin/project/examcloud/static-new/admin/dist/;
+		try_files $uri $uri/ /admin/index.html;
+	}
+
+	location ^~ /admin/js/ {
+		alias /home/admin/project/examcloud/static-new/admin/dist/js/;
+		try_files $uri $uri/ =404;
+	}
+
+	location = /oe-web {
+		rewrite /oe-web /oe-web/ last;
+	}
+
+	location ^~ /oe-web/ {
+		alias /home/admin/project/examcloud/static-new/oe-web/dist/;
+		try_files $uri $uri/ /oe-web/index.html;
+	}
+
+	location ^~ /oe-web/js/ {
+		alias /home/admin/project/examcloud/static-new/oe-web/dist/js/;
+		try_files $uri $uri/ =404;
+	}
+
+	# location ~* (js|css|img|fonts|models) {
+	#	root /home/admin/project/examcloud/static-new/oe-web/dist/;
+	# }
+
+	location = /oe-wap {
+		rewrite /oe-wap /oe-wap/ last;
+	}
+
+	location ^~ /oe-wap/ {
+		alias /home/admin/project/examcloud/static-new/oe-wap/dist/;
+		try_files $uri $uri/ /oe-wap/index.html;
+	}
+
+	location = /photo-upload {
+		rewrite /photo-upload /photo-upload/ last;
+	}
+
+	location ^~ /photo-upload/ {
+		alias /home/admin/project/examcloud/static-new/photo-upload/dist/;
+		try_files $uri $uri/ /photo-upload/index.html;
+	}
+
+	location ^~ /electron-config/ {
+		alias /home/admin/project/examcloud/static-new/electron-config/;
+	}
+
+	location ^~ /downloads/ {
+		alias /home/admin/project/examcloud/static-new/downloads/;
+	}
+
+	location ^~ /oe/facepp_api {
+		proxy_pass https://api-cn.faceplusplus.com/facepp/v3;
+	}
+
+	location ^~ /jenkins {
+		proxy_pass http://localhost:9000/jenkins;
+	}
+
+	location ^~ /resource.js {
+		proxy_pass http://basic/resource.js;
+	}
+
+
+	location ^~ /api/ecs_core/ {
+		proxy_pass http://basic;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_exam_work/ {
+		proxy_pass http://examwork;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_ques/ {
+		proxy_pass http://question-for-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_student/ {
+		proxy_pass http://oe-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_admin/ {
+		proxy_pass http://oe-admin-for-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_student_face/ {
+		proxy_pass http://oe-task;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ws/ {
+		proxy_pass http://ws;
+			proxy_http_version 1.1;
+		proxy_connect_timeout 60s;
+		proxy_read_timeout 3600s;
+		proxy_send_timeout 12s;
+		proxy_set_header Upgrade $http_upgrade;
+		proxy_set_header Connection "upgrade";
+	}
+
+	location ^~ /api/ecs_marking/ {
+		proxy_pass http://marking;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_data_process/ {
+		proxy_pass http://logic-marking;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_outlet/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/ {
+		proxy_pass http://exchange/;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/outer/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/inner/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /cmcClient/ {
+		proxy_pass http://bridge;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/app-api/ {
+		proxy_pass http://app-api;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ctr/task/ {
+		proxy_pass http://task;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_prt/ {
+		proxy_pass http://print;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_reports/ {
+		proxy_pass http://reports;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+}

+ 27 - 0
nginx/dev-192.168.10.39/ssl/current.key

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAm249bunDhzFp5JMSgxRIlcPCUKOFFpmDrWC84aC6ZuLUWyHt
+QtZ6BX4Qv5o8YKehAdTPlOXc3XlToA+uhub/sQXJrNLiOt0Lg0xdmbp06W8ItSTp
+4oYl8biYvfQUC+zfqAnOFm7F1pvnwyNLN+QuQiRrKmk+hdFLIopSdstASidpJLzK
+CMMBVjsqb6g1QilfHdwEyKO5SBXosfFdxtqJF362WHVmL4uuFAA7m5qnHxmaXYVh
+6a9aV+XKsrMwxlocZ4DcWxCBHV++IIk6TcKaYpL4Lk6oJIHjH15Opwm5NQVVDfZ0
+TjfOxvtDWKu93O+yTrIYcF2zS09/TQgAyvZ95wIDAQABAoIBAD3wHEMKnIRPSKdx
+hDr/5jzoGZMQ1oQ/AJ4ioqI27pD5ay41wtqTpWRy7DGuQMkzg5G7QE1RnEYVhyGN
+njrb6qCccdWQ494ZH/FeiR4tk1FCkfG9mAZQ9uXwbc2kaiimaCoKXjnKQsRWtHCq
+q9rF7zkkUiBAeE3TLWHCRUJZlHD3yy6JmiUWmdZCHKErrkEb99BXsNQoXPIqGGi8
+g13Ir/gQpzqoRc+eBQ6OCYoAmnWknsvwwANYuHOWaaFEHYzdL+unrgTBOVYACv7h
+nKmAZWSa5ngSpE2vRduEJniknNT6WvSRziJsCCTL2Y4u4CFa7rFCDZzN8PtH4rPZ
+SlLVzYECgYEA44b3SOLdTUkfDBpjlQa3r6o21rlKTgZI82A/RQ1QIuTTfUF6kd2/
+3UYb33wr6hj5jQ8Qj7ydgoBrhitqS9/fjMwNXA98R23+s04W4NINnuhT2u2kczuC
+GIk+E0m4teDGfvGUrB1XIEb0lpjyPqigdow1ys8K1A7+qIHOPr0lChECgYEAruGY
+uGhFnuilNNiyJOj23yCuskbHtHnXNLuNg1A5D6egDh9qLiZkh95edTdydXG5v+as
+OYglh0NGse02eil2FVfbjBfUZB4X/CEEVOeF8Qm2Pgq9nJ3WoCxlnRE4LccPMn/Z
+dm+/rl/VwdzufFb65Jg/2l1qu7Mc09sQ/3SB0HcCgYAzN/G4zaElwb0ke1hJdu6o
+s7eOlL1+XPnVF6iGgd21TS+ytafC6FlFlX+2ynwUQbUDpQ2EXeBTPVd3J5TRKb9o
+MZMcUzwV1FQOxxhtWbvJNuGRmgd4DUBXB6Yar3DOOKBWeUmPiTdQw8hRknKN2mXs
+6dk+I2d7nziCdF4aT3fkEQKBgEkoZtL+C+HmQPZSkHOQYXYGHg7GPVTqg3Sz4QdF
+0BkUboh569lShkuwYqN2hpNK+AGnZfTLV6e2JSTZryh7n8Jd9qIsddVMIYx/42gB
+Uq76+RoLNDcIcHihGgES6wV7eIgPo9E//lfcD3gCDGJHoL1wU4Xt/nB3BWA7DGlR
+O90RAoGBAJ4sUrKCaxTuN21VhrAXMcJ+9qpxm5XCzIlqH3JSWZXvBG/Qdm4t18p1
+eXrBeYXtdyBTAeY5F1fIuttTpbybJqg3ytEB8dobqVjpd2feuX6j2xlGDQRy1iHa
+XFkcAPrmGojzMoa7EGEMfOrat/h9jrRNGf3DLORdGi/wt6onF5K9
+-----END RSA PRIVATE KEY-----

+ 62 - 0
nginx/dev-192.168.10.39/ssl/current.pem

@@ -0,0 +1,62 @@
+-----BEGIN CERTIFICATE-----
+MIIF7zCCBNegAwIBAgIQAp7LGNGxL2vxPQ0FDV7GUDANBgkqhkiG9w0BAQsFADBe
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMR0wGwYDVQQDExRSYXBpZFNTTCBSU0EgQ0EgMjAxODAe
+Fw0yMDA2MjIwMDAwMDBaFw0yMjA3MDIxMjAwMDBaMBgxFjAUBgNVBAMMDSoucW10
+aC5jb20uY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbbj1u6cOH
+MWnkkxKDFEiVw8JQo4UWmYOtYLzhoLpm4tRbIe1C1noFfhC/mjxgp6EB1M+U5dzd
+eVOgD66G5v+xBcms0uI63QuDTF2ZunTpbwi1JOnihiXxuJi99BQL7N+oCc4WbsXW
+m+fDI0s35C5CJGsqaT6F0UsiilJ2y0BKJ2kkvMoIwwFWOypvqDVCKV8d3ATIo7lI
+Feix8V3G2okXfrZYdWYvi64UADubmqcfGZpdhWHpr1pX5cqyszDGWhxngNxbEIEd
+X74giTpNwppikvguTqgkgeMfXk6nCbk1BVUN9nRON87G+0NYq73c77JOshhwXbNL
+T39NCADK9n3nAgMBAAGjggLtMIIC6TAfBgNVHSMEGDAWgBRTyhdZ/GvAAyEvGq7k
+qqgcglbadTAdBgNVHQ4EFgQUszWe8+/8jMCx8sc7TBCsCaE8AM0wJQYDVR0RBB4w
+HIINKi5xbXRoLmNvbS5jboILcW10aC5jb20uY24wDgYDVR0PAQH/BAQDAgWgMB0G
+A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBMBgNVHSAERTBDMDcGCWCGSAGG
+/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
+MAgGBmeBDAECATB1BggrBgEFBQcBAQRpMGcwJgYIKwYBBQUHMAGGGmh0dHA6Ly9z
+dGF0dXMucmFwaWRzc2wuY29tMD0GCCsGAQUFBzAChjFodHRwOi8vY2FjZXJ0cy5y
+YXBpZHNzbC5jb20vUmFwaWRTU0xSU0FDQTIwMTguY3J0MAkGA1UdEwQCMAAwggF/
+BgorBgEEAdZ5AgQCBIIBbwSCAWsBaQB2ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4
++U1dJlwlXceEAAABctq0lOQAAAQDAEcwRQIhAPSyYr571MFGIqag7I8DvDEuofSz
+niYiIpupf2ZPr9uOAiBnDSGW330Kgq4q9DjPlMdyHhOEwxzw4ArL9pEfh5sBogB2
+ACJFRQdZVSRWlj+hL/H3bYbgIyZjrcBLf13Gg1xu4g8CAAABctq0lRIAAAQDAEcw
+RQIgXf8WhjgHtV1FIxcyuvxsE2l4jd8p7an6XMhXC5JdqWsCIQCMpvVpUbwfHBeL
+uW8y1M/Dov5ucb6yVw8tQlVX+gSnEwB3AFGjsPX9AXmcVm24N3iPDKR6zBsny/ee
+iEKaDf7UiwXlAAABctq0lWIAAAQDAEgwRgIhAP1Grc7Mmyy5i6UyNFtvgvCpxyO4
+kxUqheqszgaH8kUyAiEA4PT+hRcN8voF2WAnt8uD8sYRLFwWUIrMsULm1XzLxzMw
+DQYJKoZIhvcNAQELBQADggEBAL8SqYpJGwXgsL4PLO2JC7WEsMIjaMEoC1S3IUNp
+aR6CIW0WCdbokeMrxL1VHKq9vVqc8a7bZAYF+Yx5wXVb3S8prcBZamdWZgb4Ifyy
+NdTBa/pk+h5s3TTPDFl9bmBTDc6id+EPZk5PK3W3halQG/eJULN51PmeBTggaaEe
+0aKvIqp9gCFm8WnuHMFAZ/AKwj5K4JAdGUAJjxZzfxnv1B4fR5XBfqpdVqaxOaZv
+rvUyvmHoSP4+pTE0EUJFnoz9GXZ4TwEbvsGX+G5BkXvOS8dLElpy0s1O+7HgUumA
+RvwfEPEQpQy6U9wQAdSoW7dfAjgwZwoY/Yy74MScKFxij2w=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEsTCCA5mgAwIBAgIQCKWiRs1LXIyD1wK0u6tTSTANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0xNzExMDYxMjIzMzNaFw0yNzExMDYxMjIzMzNaMF4xCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xHTAbBgNVBAMTFFJhcGlkU1NMIFJTQSBDQSAyMDE4MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5S2oihEo9nnpezoziDtx4WWLLCll/e0t1EYemE5n
++MgP5viaHLy+VpHP+ndX5D18INIuuAV8wFq26KF5U0WNIZiQp6mLtIWjUeWDPA28
+OeyhTlj9TLk2beytbtFU6ypbpWUltmvY5V8ngspC7nFRNCjpfnDED2kRyJzO8yoK
+MFz4J4JE8N7NA1uJwUEFMUvHLs0scLoPZkKcewIRm1RV2AxmFQxJkdf7YN9Pckki
+f2Xgm3b48BZn0zf0qXsSeGu84ua9gwzjzI7tbTBjayTpT+/XpWuBVv6fvarI6bik
+KB859OSGQuw73XXgeuFwEPHTIRoUtkzu3/EQ+LtwznkkdQIDAQABo4IBZjCCAWIw
+HQYDVR0OBBYEFFPKF1n8a8ADIS8aruSqqByCVtp1MB8GA1UdIwQYMBaAFAPeUDVW
+0Uy7ZvCj4hsbw5eyPdFVMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEF
+BQcDAQYIKwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB/wIBADA0BggrBgEFBQcBAQQo
+MCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBCBgNVHR8E
+OzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9i
+YWxSb290Q0EuY3JsMGMGA1UdIARcMFowNwYJYIZIAYb9bAECMCowKAYIKwYBBQUH
+AgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCwYJYIZIAYb9bAEBMAgG
+BmeBDAECATAIBgZngQwBAgIwDQYJKoZIhvcNAQELBQADggEBAH4jx/LKNW5ZklFc
+YWs8Ejbm0nyzKeZC2KOVYR7P8gevKyslWm4Xo4BSzKr235FsJ4aFt6yAiv1eY0tZ
+/ZN18bOGSGStoEc/JE4ocIzr8P5Mg11kRYHbmgYnr1Rxeki5mSeb39DGxTpJD4kG
+hs5lXNoo4conUiiJwKaqH7vh2baryd8pMISag83JUqyVGc2tWPpO0329/CWq2kry
+qv66OSMjwulUz0dXf4OHQasR7CNfIr+4KScc6ABlQ5RDF86PGeE6kdwSQkFiB/cQ
+ysNyq0jEDQTkfa2pjmuWtMCNbBnhFXBYejfubIhaUbEv2FOQB3dCav+FPg5eEveX
+TVyMnGo=
+-----END CERTIFICATE-----

+ 59 - 0
nginx/dev-192.168.10.39/ssl/ea100/cert.pem

@@ -0,0 +1,59 @@
+-----BEGIN CERTIFICATE-----
+MIIFUzCCBDugAwIBAgISBAqnNJV4IHLCMkJMw5zf7SDgMA0GCSqGSIb3DQEBCwUA
+MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
+ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDA3MjMwMDM5MDVaFw0y
+MDEwMjEwMDM5MDVaMBkxFzAVBgNVBAMMDiouZWExMDAuY29tLmNuMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzRl33Jbvuq+BGcQlsCJrrFbRKxwAuWly
+IisrfdCZCTw7RWBoHtdFwuBkKZsQcfM1KKgaLOKWnj7HyGVszFUXldrsAkdgFaTn
+/TR1czHArLw6oSrqa0PWtOyB0gC1wACOQj/NwL5Z8LBLzxTWZg2NSW5WcQEU4MjQ
+fe17IvsykcRRLAG83KNp5WkRh4ljPDBGDrK1QIajkzB80XDtaID9ooPaajSH7bYD
+nzGJ21F2eq4DapEhS49SSvXBoZ8XRqiEZDKf28HapIDZ9InA1G9ike99jKvTqE1U
+PoQAwO3amR2rbicfLlgdsU7xMtmtY2ZJynyEyhCPX071NZmrFO0TtQIDAQABo4IC
+YjCCAl4wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
+BQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQxNAOVrl3Dq5aeWk+5QBsqQoP2
+AjAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRj
+MGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5v
+cmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5v
+cmcvMBkGA1UdEQQSMBCCDiouZWExMDAuY29tLmNuMEwGA1UdIARFMEMwCAYGZ4EM
+AQIBMDcGCysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0
+c2VuY3J5cHQub3JnMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHYAsh4FzIuizYog
+Todm+Su5iiUgZ2va+nDnsklTLe+LkF4AAAFzeVLwSAAABAMARzBFAiEA8rAxjBa/
+JmAtzaWeA87dxHKwkd/qDu+HcED43J6WNmYCIHZRfikwiPT7bGAIuC95sn6sBV9j
+gShpcZbC+nczyXLtAHUAb1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RMA
+AAFzeVLwgQAABAMARjBEAiB428S3AQOwfvVkKU+/l7+bfa478BFf2TT8MniijySI
+BQIgUUraomldo9SSMpyYcdQgxRVwiIwXkOSytm5PQNU9J9wwDQYJKoZIhvcNAQEL
+BQADggEBACXYYdtdmU+EhlKj+jaIr3BMal+FLrs7ntAsX2CqpNrpoeSiS23zaN8K
+vU9tbK5sIUx+h/662iQZL18NPwovYHerNacDqL2hp9llUOQ5vjYDq57b/3+wpMjt
+xa5mWym6jmCUK+JDsAArxeoLstguOex+lFP16wZsTTVSg89TfOMk3lNVBgZmGLWS
+rA5OW87IwTs5yp4kFvYzpV+QFBGBLZXg7M986jRl29MtPRS0eli2g+6TYnJFhRJo
+3YzmbixRmYBZnHZPkDiqFhM7qmsandUjM8G7EpPLM7kHljgEy3VRihR/fb/smoVH
+jz6s77tqYwFJQ/sL+0g+TbZpIlprJBk=
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
+SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
+GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
+q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
+SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
+Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
+a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
+/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
+AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
+CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
+bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
+c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
+VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
+ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
+MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
+Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
+AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
+uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
+wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
+X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
+PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
+KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
+-----END CERTIFICATE-----

+ 27 - 0
nginx/dev-192.168.10.39/ssl/ea100/key.pem

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEAzRl33Jbvuq+BGcQlsCJrrFbRKxwAuWlyIisrfdCZCTw7RWBo
+HtdFwuBkKZsQcfM1KKgaLOKWnj7HyGVszFUXldrsAkdgFaTn/TR1czHArLw6oSrq
+a0PWtOyB0gC1wACOQj/NwL5Z8LBLzxTWZg2NSW5WcQEU4MjQfe17IvsykcRRLAG8
+3KNp5WkRh4ljPDBGDrK1QIajkzB80XDtaID9ooPaajSH7bYDnzGJ21F2eq4DapEh
+S49SSvXBoZ8XRqiEZDKf28HapIDZ9InA1G9ike99jKvTqE1UPoQAwO3amR2rbicf
+LlgdsU7xMtmtY2ZJynyEyhCPX071NZmrFO0TtQIDAQABAoIBAQCHeh08rs7nx+pF
+NNWYRQROsII2Macg0lA71bxCvTl5ajnUl9vvE0/XbBV9jhoMyxQAKRoxL/NB0EJz
+UtvNFSAhMpzW3ILRiT5cePxj/SdCcotfzlNOS19V3yvZpfJoQ3W0uSSV/qa2YB2T
+SjZc7vK24JVky8wYt01RAT9nWfqLYa0OeoyraO2RULlJyOGQLcR3cG54Yu2494zm
+6waHI0iP7mYWJAFjHisqo+MywPAG62htsjU/HgsXfNkDyEKpDd5nxhJ0nPwyoC2H
+OVguk1TvEi9mfQwodpqhZD9w2vsKTjN2J/+vy6zOMkkz4b833tb0bQRQC6zMdO6j
+Q6KFyoq5AoGBAPC104j6jzEeaYXVpeRYau0HCmWmCY816p4H4lw9EhOTsp5hJbeP
+p+94RZ4wJ8H0kHPwpwIZNstV/TZZjOSTguPnqcPp7Oo1xUXCy9/L5ITUJED+1pmO
+jedl1bwNoGdw/nCyJJqzGofAltt/oq7cTxQKJs33Xb6U9d7KJeZFWZ2DAoGBANog
+k9O9bciSNi8Pp162pGe5WBx1MGo3/GyOrnTdvc22c1aSjHUK+LGFJ5DwMpIqq7o2
+lxzn+wIXwUvTJsxmAbwIvk4SvQgW2rUKwQpYpqm8GJJnXkDSQnPQCqtgsuR3NAXm
+b+6VpIa1JpoOsVQTgMNQx920YqteS9KjBtRg/DxnAoGBAMJwbfaJR1/LDDxSz5V7
+oqvi8xAXJkOrruCGx9/waQitVyy+lqQHhAVZpwrYJVV0Q7eT3qRAT9XCmS7s+XWu
+fp2whZ6++GRcmQT4DI2z+t0dLEfgUuNpltEjnpowe7DzQmUwUYcxRC4CcRnPqU8M
+oUgzxxK7TdtkIpQbwK+Yt4IXAoGAeLpJN4uD5NxQExIV780lB6fFBdMy3cdo9eiu
+1E4ajG4sPkFUbj+JUC/Dq2vWgaIOdD1cvAoFmq3tNXuD4OOgmCM6uVmTuJN1r3hp
+ScGxVQafjwCZYUU+tHz0OtCFkwALEiztzN6UNl6zI9d3/HHi9beTN7lsVy8Uxlun
+Hwsi8IcCgYEAmlrU9OXbVwA2HPIcIxmtqqkXzc/U6Tii67FCSEf2CwEEH4g5J1J2
+qnATtWHKk25GMHq12d0l2wFTO3S7ZO1mgHoYgRBeYCc61o8HEp1XA3fLpntazsh1
+5CV+WN6dv7CY7GkH4tsCfh+JiO2NAMVpX0QPRjHUFkcDVz3HDwpqarU=
+-----END RSA PRIVATE KEY-----

+ 124 - 0
nginx/prod-192.168.1.60/nginx.conf

@@ -0,0 +1,124 @@
+
+user root;
+worker_processes auto;
+worker_cpu_affinity auto;
+worker_rlimit_nofile 65535;
+
+events {
+  worker_connections 65535;
+  accept_mutex off;
+}
+
+http {
+  include mime.types;
+  default_type application/octet-stream;
+  sendfile on;
+
+
+  # log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+  # '$status $body_bytes_sent "$http_referer" '
+  # '"$http_user_agent" "$http_x_forwarded_for"';
+  # access_log  logs/access.log  main;
+  access_log off;
+
+
+  underscores_in_headers on;
+  tcp_nopush on;
+  client_max_body_size 100m;
+  keepalive_timeout 3600;
+  proxy_read_timeout 3600;
+  gzip on;
+  gzip_min_length 1k;
+  gzip_comp_level 4;
+  gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
+  gzip_vary on;
+
+  # =====================================================================
+
+  upstream basic {
+    server 192.168.1.78:8000;
+  }
+
+  upstream examwork {
+    server 192.168.1.83:8001;
+  }
+
+  upstream question-for-student {
+    server 192.168.1.81:8008;
+  }
+
+  upstream question-for-admin {
+    server 192.168.1.70:8008;
+  }
+
+  upstream oe-student {
+    server 192.168.1.82:8003;
+    server 192.168.1.84:8003;
+    #server 192.168.1.85:8003;
+  }
+
+  upstream oe-admin-for-admin {
+    server 192.168.1.70:8013;
+    #server 192.168.1.72:8013;
+  }
+
+  upstream oe-admin-for-student {
+    server 192.168.1.81:8013;
+  }
+
+  upstream oe-task {
+    server 192.168.1.76:8002;
+  }
+
+  upstream ws {
+    server 192.168.1.76:8010;
+    #server 192.168.1.75:8010;
+  }
+
+  upstream marking {
+    server 192.168.1.71:8004;
+  }
+
+  upstream logic-marking {
+    server 192.168.1.71:8005;
+  }
+
+  upstream exchange {
+    server 192.168.1.83:8007;
+  }
+
+  upstream bridge {
+    server 192.168.1.78:8020;
+  }
+
+  upstream app-api {
+    server 192.168.1.78:8090;
+  }
+
+  upstream task {
+    server 192.168.1.71:8011;
+  }
+
+  upstream print {
+    server 192.168.1.71:8009;
+  }
+
+  #upstream reports {
+  #  server 192.168.1.84:8015;
+  #}
+
+  # =====================================================================
+  include sites/http80.conf;
+  include sites/http8000.conf;
+  include sites/http8020.conf;
+  include sites/http8858.conf;
+  include sites/http8007.conf;
+  include sites/http8900.conf;
+  include sites/http8898.conf;
+  include sites/http8700.conf;
+  include sites/https8878.conf;
+  # include sites/https443.conf;
+  include sites/block_ips.conf;
+
+}
+

+ 2 - 0
nginx/prod-192.168.1.60/sites/block_ips.conf

@@ -0,0 +1,2 @@
+
+deny 106.6.174.0/24;

+ 117 - 0
nginx/prod-192.168.1.60/sites/http80.conf

@@ -0,0 +1,117 @@
+server {
+	listen 80;
+	charset utf-8;
+
+	location /nginx_status {
+		stub_status on;
+		access_log off;
+	}
+
+	location / {
+		alias /home/admin/project/examcloud/static/examcloud-admin-web/dist/;
+		proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /admin/ {
+		rewrite ^/(.*) /index.html break;
+		root /home/admin/project/examcloud/static/examcloud-admin-web/dist/;
+	}
+
+	location ^~ /api/ecs_core/ {
+		proxy_pass http://basic;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_exam_work/ {
+		proxy_pass http://examwork;
+			proxy_read_timeout 3600;
+		proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_ques/ {
+		proxy_pass http://question-for-admin;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_student/ {
+		proxy_pass http://oe-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_admin/ {
+		proxy_pass http://oe-admin-for-admin;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ws/ {
+		proxy_pass http://ws;
+			proxy_http_version 1.1;
+		proxy_connect_timeout 60s;
+		proxy_read_timeout 3600s;
+		proxy_send_timeout 12s;
+		proxy_set_header Upgrade $http_upgrade;
+		proxy_set_header Connection "upgrade";
+	}
+
+	location ^~ /api/ecs_marking/ {
+		proxy_pass http://marking;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_data_process/ {
+		proxy_pass http://logic-marking;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_outlet/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/outer/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /cmcClient/ {
+		proxy_pass http://bridge;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/app-api/ {
+		proxy_pass http://app-api;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ctr/task/ {
+		proxy_pass http://task;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_prt/ {
+		proxy_pass http://print;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	#location ^~ /api/ecs_reports/ {
+	#	proxy_pass http://reports;
+	#		proxy_set_header X-Real-IP $remote_addr;
+	#	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	#}
+
+}
+

+ 11 - 0
nginx/prod-192.168.1.60/sites/http8000.conf

@@ -0,0 +1,11 @@
+server {
+  listen 8000;
+  charset utf-8;
+
+  location ^~ /api/ecs_core/ {
+    proxy_pass http://basic;
+      proxy_set_header X-Real-IP $remote_addr;
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+  }
+
+}

+ 9 - 0
nginx/prod-192.168.1.60/sites/http8007.conf

@@ -0,0 +1,9 @@
+server {
+	listen 8007;
+	charset utf-8;
+
+	location ^~ / {
+		proxy_pass http://exchange;
+	}
+
+}

+ 9 - 0
nginx/prod-192.168.1.60/sites/http8020.conf

@@ -0,0 +1,9 @@
+server {
+	listen 8020;
+	charset utf-8;
+
+	location ^~ / {
+		proxy_pass http://bridge;
+	}
+
+}

+ 50 - 0
nginx/prod-192.168.1.60/sites/http8700.conf

@@ -0,0 +1,50 @@
+server {
+	listen 8700;
+	charset utf-8;
+
+	location = / {
+		rewrite / /oe-wap/ last;
+	}
+
+	location ^~ /electron-config/ {
+		alias /home/admin/project/examcloud/static-new/electron-config/;
+	}
+
+	location = /photo-upload {
+		rewrite /photo-upload /photo-upload/ last;
+	}
+
+	location ^~ /photo-upload {
+		alias /home/admin/project/examcloud/static-new/photo-upload/dist/;
+		try_files $uri $uri/ /photo-upload/index.html;
+	}
+
+	location = /admin-web {
+		rewrite /admin-web /admin-web/ last;
+	}
+
+	location ^~ /admin-web {
+		alias /home/admin/project/examcloud/static-new/examcloud-admin-web/dist/;
+		try_files $uri $uri/ /admin-web/index.html;
+	}
+
+	location = /oe-wap {
+		rewrite /oe-wap /oe-wap/ last;
+	}
+
+	location ^~ /oe-wap {
+		alias /home/admin/project/examcloud/static-new/student-client-wap/dist/;
+		try_files $uri $uri/ /oe-wap/index.html;
+	}
+
+	location = /oe-web {
+		rewrite /oe-web /oe-web/ last;
+	}
+
+	location ^~ /oe-web {
+		alias /home/admin/project/examcloud/static-new/student-client/dist/;
+		try_files $uri $uri/ /oe-web/index.html;
+	}
+
+}
+

+ 29 - 0
nginx/prod-192.168.1.60/sites/http8858.conf

@@ -0,0 +1,29 @@
+server {
+	listen 8858;
+	charset utf-8;
+
+	location ^~ /api/ecs_core/ {
+		proxy_pass http://basic;
+	}
+
+	location ^~ /api/ecs_exam_work/ {
+		proxy_pass http://examwork;
+			proxy_read_timeout 3600;
+		proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exam_record/ {
+		proxy_pass http://oe-student;
+	}
+
+	location ^~ /api/ecs_outlet/ {
+		proxy_pass http://exchange;
+	}
+
+	location ^~ /api/ctr/task/ {
+		proxy_pass http://task;
+	}
+
+}
+

+ 10 - 0
nginx/prod-192.168.1.60/sites/http8898.conf

@@ -0,0 +1,10 @@
+server {
+	listen 8898;
+	charset utf-8;
+	client_max_body_size 50m;
+
+	location ^~ /electron-config/ {
+		alias /home/admin/project/examcloud/static/electron-config/;
+	}
+
+}

+ 38 - 0
nginx/prod-192.168.1.60/sites/http8900.conf

@@ -0,0 +1,38 @@
+server {
+	listen 8900;
+	charset utf-8;
+
+	location /nginx_status {
+		stub_status on;
+		access_log off;
+	}
+
+	location / {
+		alias /home/admin/project/examcloud/static/photo-upload/dist/;
+		proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /admin/ {
+		rewrite ^/(.*) /index.html break;
+		root /home/admin/project/examcloud/static/photo-upload/dist/;
+	}
+
+	location ^~ /api/ecs_core/ {
+		proxy_pass http://basic;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_exam_work/ {
+		proxy_pass http://examwork;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_outlet/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+}

+ 187 - 0
nginx/prod-192.168.1.60/sites/https443.conf

@@ -0,0 +1,187 @@
+server {
+	listen 8443 ssl;
+	charset utf-8;
+
+	ssl_certificate ssl/current.pem;
+	ssl_certificate_key ssl/current.key;
+
+	ssl_session_cache	shared:SSL:1m;
+	ssl_session_timeout	5m;
+	ssl_ciphers	HIGH:!aNULL:!MD5;
+	ssl_prefer_server_ciphers on;
+
+
+	location = / {
+		rewrite / /admin/ last;
+	}
+
+	location = /admin {
+		rewrite /admin /admin/ last;
+	}
+
+	location ^~ /admin/ {
+		alias /home/admin/project/examcloud/static-new/admin/dist/;
+		try_files $uri $uri/ /admin/index.html;
+	}
+
+	location = /oe-web {
+		rewrite /oe-web /oe-web/ last;
+	}
+
+	location ^~ /oe-web/ {
+		alias /home/admin/project/examcloud/static-new/oe-web/dist/;
+		try_files $uri $uri/ /oe-web/index.html;
+	}
+
+	location = /oe-wap {
+		rewrite /oe-wap /oe-wap/ last;
+	}
+
+	location ^~ /oe-wap/ {
+		alias /home/admin/project/examcloud/static-new/oe-wap/dist/;
+		try_files $uri $uri/ /oe-wap/index.html;
+	}
+
+	location = /photo-upload {
+		rewrite /photo-upload /photo-upload/ last;
+	}
+
+	location ^~ /photo-upload/ {
+		alias /home/admin/project/examcloud/static-new/photo-upload/dist/;
+		try_files $uri $uri/ /photo-upload/index.html;
+	}
+
+	location ^~ /electron-config/ {
+		alias /home/admin/project/examcloud/static-new/electron-config/;
+	}
+
+	location ^~ /downloads/ {
+		alias /home/admin/project/examcloud/static-new/downloads/;
+	}
+
+	location ^~ /oe/facepp_api {
+		proxy_pass https://api-cn.faceplusplus.com/facepp/v3;
+	}
+
+	#location ^~ /jenkins {
+	#	proxy_pass http://localhost:9000/jenkins;
+	#}
+
+	location ^~ /resource.js {
+		proxy_pass http://basic/resource.js;
+	}
+
+	location ^~ /api/ecs_core/ {
+		proxy_pass http://basic;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_exam_work/ {
+		proxy_pass http://examwork;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_ques/ {
+		proxy_pass http://question-for-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_student/ {
+		proxy_pass http://oe-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_admin/ {
+		proxy_pass http://oe-admin-for-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_student_face/ {
+		proxy_pass http://oe-task;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ws/ {
+		proxy_pass http://ws;
+			proxy_http_version 1.1;
+		proxy_connect_timeout 60s;
+		proxy_read_timeout 3600s;
+		proxy_send_timeout 12s;
+		proxy_set_header Upgrade $http_upgrade;
+		proxy_set_header Connection "upgrade";
+	}
+
+	location ^~ /api/ecs_marking/ {
+		proxy_pass http://marking;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_data_process/ {
+		proxy_pass http://logic-marking;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_outlet/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/ {
+		proxy_pass http://exchange/;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/outer/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/inner/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /cmcClient/ {
+		proxy_pass http://bridge;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/app-api/ {
+		proxy_pass http://app-api;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ctr/task/ {
+		proxy_pass http://task;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_prt/ {
+		proxy_pass http://print;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	#location ^~ /api/ecs_reports/ {
+	#	proxy_pass http://reports;
+	#		proxy_set_header X-Real-IP $remote_addr;
+	#	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	#}
+
+}
+

+ 97 - 0
nginx/prod-192.168.1.60/sites/https8878.conf

@@ -0,0 +1,97 @@
+server {
+	listen 8878 ssl;
+	charset utf-8;
+
+	ssl_certificate ssl/current.pem;
+	ssl_certificate_key ssl/current.key;
+
+	ssl_session_cache	shared:SSL:1m;
+	ssl_session_timeout	5m;
+	ssl_ciphers	HIGH:!aNULL:!MD5;
+	ssl_prefer_server_ciphers on;
+
+	location ^~ /resource.js {
+		proxy_pass http://basic/resource.js;
+	}
+
+	location ^~ /downloads/ {
+		alias /home/admin/project/examcloud/static/downloads/;
+	}
+
+	location ^~ /electron-config/ {
+		alias /home/admin/project/examcloud/static/electron-config/;
+	}
+
+	location ^~ /oe/facepp_api {
+		proxy_pass https://api-cn.faceplusplus.com/facepp/v3;
+	}
+
+	location ~* (js|css|img|fonts|models) {
+		root /home/admin/project/examcloud/static/student-client/dist;
+	}
+
+	location ^~ /oe/ {
+		rewrite ^/(.*) /index.html break;
+		root /home/admin/project/examcloud/static/student-client/dist;
+	}
+
+	location ^~ /api/ecs_core/ {
+		proxy_pass http://basic;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_exam_work {
+		proxy_pass http://examwork;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_ques/ {
+		proxy_pass http://question-for-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_student/ {
+		proxy_pass http://oe-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_admin/ {
+		proxy_pass http://oe-admin-for-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_student_face/ {
+		proxy_pass http://oe-task;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ws/ {
+		proxy_pass http://ws;
+			proxy_http_version 1.1;
+		proxy_connect_timeout 60s;
+		proxy_read_timeout 3600s;
+		proxy_send_timeout 12s;
+		proxy_set_header Upgrade $http_upgrade;
+		proxy_set_header Connection "upgrade";
+	}
+
+	location ^~ /api/exchange/inner/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	#location ^~ /api/ecs_reports/ {
+	#	proxy_pass http://reports;
+	#		proxy_set_header X-Real-IP $remote_addr;
+	#	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	#}
+
+}
+

+ 27 - 0
nginx/prod-192.168.1.60/ssl/current.key

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAm249bunDhzFp5JMSgxRIlcPCUKOFFpmDrWC84aC6ZuLUWyHt
+QtZ6BX4Qv5o8YKehAdTPlOXc3XlToA+uhub/sQXJrNLiOt0Lg0xdmbp06W8ItSTp
+4oYl8biYvfQUC+zfqAnOFm7F1pvnwyNLN+QuQiRrKmk+hdFLIopSdstASidpJLzK
+CMMBVjsqb6g1QilfHdwEyKO5SBXosfFdxtqJF362WHVmL4uuFAA7m5qnHxmaXYVh
+6a9aV+XKsrMwxlocZ4DcWxCBHV++IIk6TcKaYpL4Lk6oJIHjH15Opwm5NQVVDfZ0
+TjfOxvtDWKu93O+yTrIYcF2zS09/TQgAyvZ95wIDAQABAoIBAD3wHEMKnIRPSKdx
+hDr/5jzoGZMQ1oQ/AJ4ioqI27pD5ay41wtqTpWRy7DGuQMkzg5G7QE1RnEYVhyGN
+njrb6qCccdWQ494ZH/FeiR4tk1FCkfG9mAZQ9uXwbc2kaiimaCoKXjnKQsRWtHCq
+q9rF7zkkUiBAeE3TLWHCRUJZlHD3yy6JmiUWmdZCHKErrkEb99BXsNQoXPIqGGi8
+g13Ir/gQpzqoRc+eBQ6OCYoAmnWknsvwwANYuHOWaaFEHYzdL+unrgTBOVYACv7h
+nKmAZWSa5ngSpE2vRduEJniknNT6WvSRziJsCCTL2Y4u4CFa7rFCDZzN8PtH4rPZ
+SlLVzYECgYEA44b3SOLdTUkfDBpjlQa3r6o21rlKTgZI82A/RQ1QIuTTfUF6kd2/
+3UYb33wr6hj5jQ8Qj7ydgoBrhitqS9/fjMwNXA98R23+s04W4NINnuhT2u2kczuC
+GIk+E0m4teDGfvGUrB1XIEb0lpjyPqigdow1ys8K1A7+qIHOPr0lChECgYEAruGY
+uGhFnuilNNiyJOj23yCuskbHtHnXNLuNg1A5D6egDh9qLiZkh95edTdydXG5v+as
+OYglh0NGse02eil2FVfbjBfUZB4X/CEEVOeF8Qm2Pgq9nJ3WoCxlnRE4LccPMn/Z
+dm+/rl/VwdzufFb65Jg/2l1qu7Mc09sQ/3SB0HcCgYAzN/G4zaElwb0ke1hJdu6o
+s7eOlL1+XPnVF6iGgd21TS+ytafC6FlFlX+2ynwUQbUDpQ2EXeBTPVd3J5TRKb9o
+MZMcUzwV1FQOxxhtWbvJNuGRmgd4DUBXB6Yar3DOOKBWeUmPiTdQw8hRknKN2mXs
+6dk+I2d7nziCdF4aT3fkEQKBgEkoZtL+C+HmQPZSkHOQYXYGHg7GPVTqg3Sz4QdF
+0BkUboh569lShkuwYqN2hpNK+AGnZfTLV6e2JSTZryh7n8Jd9qIsddVMIYx/42gB
+Uq76+RoLNDcIcHihGgES6wV7eIgPo9E//lfcD3gCDGJHoL1wU4Xt/nB3BWA7DGlR
+O90RAoGBAJ4sUrKCaxTuN21VhrAXMcJ+9qpxm5XCzIlqH3JSWZXvBG/Qdm4t18p1
+eXrBeYXtdyBTAeY5F1fIuttTpbybJqg3ytEB8dobqVjpd2feuX6j2xlGDQRy1iHa
+XFkcAPrmGojzMoa7EGEMfOrat/h9jrRNGf3DLORdGi/wt6onF5K9
+-----END RSA PRIVATE KEY-----

+ 62 - 0
nginx/prod-192.168.1.60/ssl/current.pem

@@ -0,0 +1,62 @@
+-----BEGIN CERTIFICATE-----
+MIIF7zCCBNegAwIBAgIQAp7LGNGxL2vxPQ0FDV7GUDANBgkqhkiG9w0BAQsFADBe
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMR0wGwYDVQQDExRSYXBpZFNTTCBSU0EgQ0EgMjAxODAe
+Fw0yMDA2MjIwMDAwMDBaFw0yMjA3MDIxMjAwMDBaMBgxFjAUBgNVBAMMDSoucW10
+aC5jb20uY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbbj1u6cOH
+MWnkkxKDFEiVw8JQo4UWmYOtYLzhoLpm4tRbIe1C1noFfhC/mjxgp6EB1M+U5dzd
+eVOgD66G5v+xBcms0uI63QuDTF2ZunTpbwi1JOnihiXxuJi99BQL7N+oCc4WbsXW
+m+fDI0s35C5CJGsqaT6F0UsiilJ2y0BKJ2kkvMoIwwFWOypvqDVCKV8d3ATIo7lI
+Feix8V3G2okXfrZYdWYvi64UADubmqcfGZpdhWHpr1pX5cqyszDGWhxngNxbEIEd
+X74giTpNwppikvguTqgkgeMfXk6nCbk1BVUN9nRON87G+0NYq73c77JOshhwXbNL
+T39NCADK9n3nAgMBAAGjggLtMIIC6TAfBgNVHSMEGDAWgBRTyhdZ/GvAAyEvGq7k
+qqgcglbadTAdBgNVHQ4EFgQUszWe8+/8jMCx8sc7TBCsCaE8AM0wJQYDVR0RBB4w
+HIINKi5xbXRoLmNvbS5jboILcW10aC5jb20uY24wDgYDVR0PAQH/BAQDAgWgMB0G
+A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBMBgNVHSAERTBDMDcGCWCGSAGG
+/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
+MAgGBmeBDAECATB1BggrBgEFBQcBAQRpMGcwJgYIKwYBBQUHMAGGGmh0dHA6Ly9z
+dGF0dXMucmFwaWRzc2wuY29tMD0GCCsGAQUFBzAChjFodHRwOi8vY2FjZXJ0cy5y
+YXBpZHNzbC5jb20vUmFwaWRTU0xSU0FDQTIwMTguY3J0MAkGA1UdEwQCMAAwggF/
+BgorBgEEAdZ5AgQCBIIBbwSCAWsBaQB2ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4
++U1dJlwlXceEAAABctq0lOQAAAQDAEcwRQIhAPSyYr571MFGIqag7I8DvDEuofSz
+niYiIpupf2ZPr9uOAiBnDSGW330Kgq4q9DjPlMdyHhOEwxzw4ArL9pEfh5sBogB2
+ACJFRQdZVSRWlj+hL/H3bYbgIyZjrcBLf13Gg1xu4g8CAAABctq0lRIAAAQDAEcw
+RQIgXf8WhjgHtV1FIxcyuvxsE2l4jd8p7an6XMhXC5JdqWsCIQCMpvVpUbwfHBeL
+uW8y1M/Dov5ucb6yVw8tQlVX+gSnEwB3AFGjsPX9AXmcVm24N3iPDKR6zBsny/ee
+iEKaDf7UiwXlAAABctq0lWIAAAQDAEgwRgIhAP1Grc7Mmyy5i6UyNFtvgvCpxyO4
+kxUqheqszgaH8kUyAiEA4PT+hRcN8voF2WAnt8uD8sYRLFwWUIrMsULm1XzLxzMw
+DQYJKoZIhvcNAQELBQADggEBAL8SqYpJGwXgsL4PLO2JC7WEsMIjaMEoC1S3IUNp
+aR6CIW0WCdbokeMrxL1VHKq9vVqc8a7bZAYF+Yx5wXVb3S8prcBZamdWZgb4Ifyy
+NdTBa/pk+h5s3TTPDFl9bmBTDc6id+EPZk5PK3W3halQG/eJULN51PmeBTggaaEe
+0aKvIqp9gCFm8WnuHMFAZ/AKwj5K4JAdGUAJjxZzfxnv1B4fR5XBfqpdVqaxOaZv
+rvUyvmHoSP4+pTE0EUJFnoz9GXZ4TwEbvsGX+G5BkXvOS8dLElpy0s1O+7HgUumA
+RvwfEPEQpQy6U9wQAdSoW7dfAjgwZwoY/Yy74MScKFxij2w=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEsTCCA5mgAwIBAgIQCKWiRs1LXIyD1wK0u6tTSTANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0xNzExMDYxMjIzMzNaFw0yNzExMDYxMjIzMzNaMF4xCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xHTAbBgNVBAMTFFJhcGlkU1NMIFJTQSBDQSAyMDE4MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5S2oihEo9nnpezoziDtx4WWLLCll/e0t1EYemE5n
++MgP5viaHLy+VpHP+ndX5D18INIuuAV8wFq26KF5U0WNIZiQp6mLtIWjUeWDPA28
+OeyhTlj9TLk2beytbtFU6ypbpWUltmvY5V8ngspC7nFRNCjpfnDED2kRyJzO8yoK
+MFz4J4JE8N7NA1uJwUEFMUvHLs0scLoPZkKcewIRm1RV2AxmFQxJkdf7YN9Pckki
+f2Xgm3b48BZn0zf0qXsSeGu84ua9gwzjzI7tbTBjayTpT+/XpWuBVv6fvarI6bik
+KB859OSGQuw73XXgeuFwEPHTIRoUtkzu3/EQ+LtwznkkdQIDAQABo4IBZjCCAWIw
+HQYDVR0OBBYEFFPKF1n8a8ADIS8aruSqqByCVtp1MB8GA1UdIwQYMBaAFAPeUDVW
+0Uy7ZvCj4hsbw5eyPdFVMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEF
+BQcDAQYIKwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB/wIBADA0BggrBgEFBQcBAQQo
+MCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBCBgNVHR8E
+OzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9i
+YWxSb290Q0EuY3JsMGMGA1UdIARcMFowNwYJYIZIAYb9bAECMCowKAYIKwYBBQUH
+AgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCwYJYIZIAYb9bAEBMAgG
+BmeBDAECATAIBgZngQwBAgIwDQYJKoZIhvcNAQELBQADggEBAH4jx/LKNW5ZklFc
+YWs8Ejbm0nyzKeZC2KOVYR7P8gevKyslWm4Xo4BSzKr235FsJ4aFt6yAiv1eY0tZ
+/ZN18bOGSGStoEc/JE4ocIzr8P5Mg11kRYHbmgYnr1Rxeki5mSeb39DGxTpJD4kG
+hs5lXNoo4conUiiJwKaqH7vh2baryd8pMISag83JUqyVGc2tWPpO0329/CWq2kry
+qv66OSMjwulUz0dXf4OHQasR7CNfIr+4KScc6ABlQ5RDF86PGeE6kdwSQkFiB/cQ
+ysNyq0jEDQTkfa2pjmuWtMCNbBnhFXBYejfubIhaUbEv2FOQB3dCav+FPg5eEveX
+TVyMnGo=
+-----END CERTIFICATE-----

+ 112 - 0
nginx/test-192.168.1.91/nginx.conf

@@ -0,0 +1,112 @@
+
+user root;
+worker_processes auto;
+worker_cpu_affinity auto;
+worker_rlimit_nofile 65535;
+
+events {
+	worker_connections 65535;
+	accept_mutex off;
+}
+
+http {
+	include mime.types;
+	default_type application/octet-stream;
+	sendfile on;
+
+
+	# log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+	# '$status $body_bytes_sent "$http_referer" '
+	# '"$http_user_agent" "$http_x_forwarded_for"';
+	# access_log  logs/access.log  main;
+	access_log off;
+
+
+	underscores_in_headers on;
+	tcp_nopush on;
+	client_max_body_size 100m;
+	keepalive_timeout 3600;
+	proxy_read_timeout 3600;
+	gzip on;
+	gzip_min_length 1k;
+	gzip_comp_level 4;
+	gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
+	gzip_vary on;
+
+	# =====================================================================
+
+	upstream basic {
+		server 192.168.1.91:8000;
+	}
+
+	upstream examwork {
+		server 192.168.1.91:8001;
+	}
+
+	upstream question-for-student {
+		server 192.168.1.91:8008;
+	}
+
+	upstream question-for-admin {
+		server 192.168.1.91:8008;
+	}
+
+	upstream oe-student {
+		server 192.168.1.91:8003;
+	}
+
+	upstream oe-admin-for-admin {
+		server 192.168.1.91:8013;
+	}
+
+	upstream oe-admin-for-student {
+		server 192.168.1.91:8013;
+	}
+
+	upstream oe-task {
+		server 192.168.1.91:8002;
+	}
+
+	upstream ws {
+		server 192.168.1.91:8010;
+	}
+
+	upstream marking {
+		server 192.168.1.91:8004;
+	}
+
+	upstream logic-marking {
+		server 192.168.1.91:8005;
+	}
+
+	upstream exchange {
+		server 192.168.1.91:8007;
+	}
+
+	upstream bridge {
+		server 192.168.1.91:8020;
+	}
+
+	upstream app-api {
+		server 192.168.1.91:8090;
+	}
+
+	upstream task {
+		server 192.168.1.91:8011;
+	}
+
+	upstream print {
+		server 192.168.1.91:8009;
+	}
+
+	upstream reports {
+		server 192.168.1.91:8015;
+	}
+
+	# =====================================================================
+
+	include sites/http80.conf;
+	# include sites/https443.conf;
+	include sites/block_ips.conf;
+
+}

+ 2 - 0
nginx/test-192.168.1.91/sites/block_ips.conf

@@ -0,0 +1,2 @@
+
+# deny 106.6.174.0/24;

+ 81 - 0
nginx/test-192.168.1.91/sites/http80.conf

@@ -0,0 +1,81 @@
+server {
+	listen 80;
+	charset utf-8;
+	error_page 404 /40x.html;
+
+
+	location = / {
+		rewrite / /admin/ last;
+	}
+
+	location = /admin {
+		rewrite /admin /admin/ last;
+	}
+
+	location ^~ /admin/ {
+		alias /home/admin/project/examcloud/static-new/admin/dist/;
+		try_files $uri $uri/ /admin/index.html;
+	}
+
+	location ^~ /admin/js/ {
+		alias /home/admin/project/examcloud/static-new/admin/dist/js/;
+		try_files $uri $uri/ =404;
+	}
+
+	location = /oe-web {
+		rewrite /oe-web /oe-web/ last;
+	}
+
+	location ^~ /oe-web/ {
+		alias /home/admin/project/examcloud/static-new/oe-web/dist/;
+		try_files $uri $uri/ /oe-web/index.html;
+	}
+
+	location ^~ /oe-web/js/ {
+		alias /home/admin/project/examcloud/static-new/oe-web/dist/js/;
+		try_files $uri $uri/ =404;
+	}
+
+	# location ~* (js|css|img|fonts|models) {
+	#	root /home/admin/project/examcloud/static-new/oe-web/dist/;
+	# }
+
+	location = /oe-wap {
+		rewrite /oe-wap /oe-wap/ last;
+	}
+
+	location ^~ /oe-wap/ {
+		alias /home/admin/project/examcloud/static-new/oe-wap/dist/;
+		try_files $uri $uri/ /oe-wap/index.html;
+	}
+
+	location = /photo-upload {
+		rewrite /photo-upload /photo-upload/ last;
+	}
+
+	location ^~ /photo-upload/ {
+		alias /home/admin/project/examcloud/static-new/photo-upload/dist/;
+		try_files $uri $uri/ /photo-upload/index.html;
+	}
+
+	location ^~ /electron-config/ {
+		alias /home/admin/project/examcloud/static-new/electron-config/;
+	}
+
+	location ^~ /downloads/ {
+		alias /home/admin/project/examcloud/static-new/downloads/;
+	}
+
+	location ^~ /oe/facepp_api {
+		proxy_pass https://api-cn.faceplusplus.com/facepp/v3;
+	}
+
+	location ^~ /jenkins {
+		proxy_pass http://localhost:9000/jenkins;
+	}
+
+	location ^~ /resource.js {
+		proxy_pass http://basic/resource.js;
+	}
+
+}

+ 202 - 0
nginx/test-192.168.1.91/sites/https443.conf

@@ -0,0 +1,202 @@
+server {
+	listen 443 ssl;
+	charset utf-8;
+	error_page 404 /40x.html;
+
+	ssl_certificate ssl/ea100/cert.pem;
+	ssl_certificate_key ssl/ea100/key.pem;
+
+	ssl_session_cache	shared:SSL:1m;
+	ssl_session_timeout	5m;
+	ssl_ciphers	HIGH:!aNULL:!MD5;
+	ssl_prefer_server_ciphers on;
+
+
+	location = / {
+		rewrite / /admin/ last;
+	}
+
+	location = /admin {
+		rewrite /admin /admin/ last;
+	}
+
+	location ^~ /admin/ {
+		alias /home/admin/project/examcloud/static-new/admin/dist/;
+		try_files $uri $uri/ /admin/index.html;
+	}
+
+	location ^~ /admin/js/ {
+		alias /home/admin/project/examcloud/static-new/admin/dist/js/;
+		try_files $uri $uri/ =404;
+	}
+
+	location = /oe-web {
+		rewrite /oe-web /oe-web/ last;
+	}
+
+	location ^~ /oe-web/ {
+		alias /home/admin/project/examcloud/static-new/oe-web/dist/;
+		try_files $uri $uri/ /oe-web/index.html;
+	}
+
+	location ^~ /oe-web/js/ {
+		alias /home/admin/project/examcloud/static-new/oe-web/dist/js/;
+		try_files $uri $uri/ =404;
+	}
+
+	# location ~* (js|css|img|fonts|models) {
+	#	root /home/admin/project/examcloud/static-new/oe-web/dist/;
+	# }
+
+	location = /oe-wap {
+		rewrite /oe-wap /oe-wap/ last;
+	}
+
+	location ^~ /oe-wap/ {
+		alias /home/admin/project/examcloud/static-new/oe-wap/dist/;
+		try_files $uri $uri/ /oe-wap/index.html;
+	}
+
+	location = /photo-upload {
+		rewrite /photo-upload /photo-upload/ last;
+	}
+
+	location ^~ /photo-upload/ {
+		alias /home/admin/project/examcloud/static-new/photo-upload/dist/;
+		try_files $uri $uri/ /photo-upload/index.html;
+	}
+
+	location ^~ /electron-config/ {
+		alias /home/admin/project/examcloud/static-new/electron-config/;
+	}
+
+	location ^~ /downloads/ {
+		alias /home/admin/project/examcloud/static-new/downloads/;
+	}
+
+	location ^~ /oe/facepp_api {
+		proxy_pass https://api-cn.faceplusplus.com/facepp/v3;
+	}
+
+	location ^~ /jenkins {
+		proxy_pass http://localhost:9000/jenkins;
+	}
+
+	location ^~ /resource.js {
+		proxy_pass http://basic/resource.js;
+	}
+
+
+	location ^~ /api/ecs_core/ {
+		proxy_pass http://basic;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_exam_work/ {
+		proxy_pass http://examwork;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_ques/ {
+		proxy_pass http://question-for-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_student/ {
+		proxy_pass http://oe-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_admin/ {
+		proxy_pass http://oe-admin-for-student;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_oe_student_face/ {
+		proxy_pass http://oe-task;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ws/ {
+		proxy_pass http://ws;
+			proxy_http_version 1.1;
+		proxy_connect_timeout 60s;
+		proxy_read_timeout 3600s;
+		proxy_send_timeout 12s;
+		proxy_set_header Upgrade $http_upgrade;
+		proxy_set_header Connection "upgrade";
+	}
+
+	location ^~ /api/ecs_marking/ {
+		proxy_pass http://marking;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_data_process/ {
+		proxy_pass http://logic-marking;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_outlet/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/ {
+		proxy_pass http://exchange/;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/outer/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/exchange/inner/ {
+		proxy_pass http://exchange;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /cmcClient/ {
+		proxy_pass http://bridge;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/app-api/ {
+		proxy_pass http://app-api;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ctr/task/ {
+		proxy_pass http://task;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_prt/ {
+		proxy_pass http://print;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+	location ^~ /api/ecs_reports/ {
+		proxy_pass http://reports;
+			proxy_set_header X-Real-IP $remote_addr;
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+	}
+
+}

+ 27 - 0
nginx/test-192.168.1.91/ssl/current.key

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAm249bunDhzFp5JMSgxRIlcPCUKOFFpmDrWC84aC6ZuLUWyHt
+QtZ6BX4Qv5o8YKehAdTPlOXc3XlToA+uhub/sQXJrNLiOt0Lg0xdmbp06W8ItSTp
+4oYl8biYvfQUC+zfqAnOFm7F1pvnwyNLN+QuQiRrKmk+hdFLIopSdstASidpJLzK
+CMMBVjsqb6g1QilfHdwEyKO5SBXosfFdxtqJF362WHVmL4uuFAA7m5qnHxmaXYVh
+6a9aV+XKsrMwxlocZ4DcWxCBHV++IIk6TcKaYpL4Lk6oJIHjH15Opwm5NQVVDfZ0
+TjfOxvtDWKu93O+yTrIYcF2zS09/TQgAyvZ95wIDAQABAoIBAD3wHEMKnIRPSKdx
+hDr/5jzoGZMQ1oQ/AJ4ioqI27pD5ay41wtqTpWRy7DGuQMkzg5G7QE1RnEYVhyGN
+njrb6qCccdWQ494ZH/FeiR4tk1FCkfG9mAZQ9uXwbc2kaiimaCoKXjnKQsRWtHCq
+q9rF7zkkUiBAeE3TLWHCRUJZlHD3yy6JmiUWmdZCHKErrkEb99BXsNQoXPIqGGi8
+g13Ir/gQpzqoRc+eBQ6OCYoAmnWknsvwwANYuHOWaaFEHYzdL+unrgTBOVYACv7h
+nKmAZWSa5ngSpE2vRduEJniknNT6WvSRziJsCCTL2Y4u4CFa7rFCDZzN8PtH4rPZ
+SlLVzYECgYEA44b3SOLdTUkfDBpjlQa3r6o21rlKTgZI82A/RQ1QIuTTfUF6kd2/
+3UYb33wr6hj5jQ8Qj7ydgoBrhitqS9/fjMwNXA98R23+s04W4NINnuhT2u2kczuC
+GIk+E0m4teDGfvGUrB1XIEb0lpjyPqigdow1ys8K1A7+qIHOPr0lChECgYEAruGY
+uGhFnuilNNiyJOj23yCuskbHtHnXNLuNg1A5D6egDh9qLiZkh95edTdydXG5v+as
+OYglh0NGse02eil2FVfbjBfUZB4X/CEEVOeF8Qm2Pgq9nJ3WoCxlnRE4LccPMn/Z
+dm+/rl/VwdzufFb65Jg/2l1qu7Mc09sQ/3SB0HcCgYAzN/G4zaElwb0ke1hJdu6o
+s7eOlL1+XPnVF6iGgd21TS+ytafC6FlFlX+2ynwUQbUDpQ2EXeBTPVd3J5TRKb9o
+MZMcUzwV1FQOxxhtWbvJNuGRmgd4DUBXB6Yar3DOOKBWeUmPiTdQw8hRknKN2mXs
+6dk+I2d7nziCdF4aT3fkEQKBgEkoZtL+C+HmQPZSkHOQYXYGHg7GPVTqg3Sz4QdF
+0BkUboh569lShkuwYqN2hpNK+AGnZfTLV6e2JSTZryh7n8Jd9qIsddVMIYx/42gB
+Uq76+RoLNDcIcHihGgES6wV7eIgPo9E//lfcD3gCDGJHoL1wU4Xt/nB3BWA7DGlR
+O90RAoGBAJ4sUrKCaxTuN21VhrAXMcJ+9qpxm5XCzIlqH3JSWZXvBG/Qdm4t18p1
+eXrBeYXtdyBTAeY5F1fIuttTpbybJqg3ytEB8dobqVjpd2feuX6j2xlGDQRy1iHa
+XFkcAPrmGojzMoa7EGEMfOrat/h9jrRNGf3DLORdGi/wt6onF5K9
+-----END RSA PRIVATE KEY-----

+ 62 - 0
nginx/test-192.168.1.91/ssl/current.pem

@@ -0,0 +1,62 @@
+-----BEGIN CERTIFICATE-----
+MIIF7zCCBNegAwIBAgIQAp7LGNGxL2vxPQ0FDV7GUDANBgkqhkiG9w0BAQsFADBe
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMR0wGwYDVQQDExRSYXBpZFNTTCBSU0EgQ0EgMjAxODAe
+Fw0yMDA2MjIwMDAwMDBaFw0yMjA3MDIxMjAwMDBaMBgxFjAUBgNVBAMMDSoucW10
+aC5jb20uY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbbj1u6cOH
+MWnkkxKDFEiVw8JQo4UWmYOtYLzhoLpm4tRbIe1C1noFfhC/mjxgp6EB1M+U5dzd
+eVOgD66G5v+xBcms0uI63QuDTF2ZunTpbwi1JOnihiXxuJi99BQL7N+oCc4WbsXW
+m+fDI0s35C5CJGsqaT6F0UsiilJ2y0BKJ2kkvMoIwwFWOypvqDVCKV8d3ATIo7lI
+Feix8V3G2okXfrZYdWYvi64UADubmqcfGZpdhWHpr1pX5cqyszDGWhxngNxbEIEd
+X74giTpNwppikvguTqgkgeMfXk6nCbk1BVUN9nRON87G+0NYq73c77JOshhwXbNL
+T39NCADK9n3nAgMBAAGjggLtMIIC6TAfBgNVHSMEGDAWgBRTyhdZ/GvAAyEvGq7k
+qqgcglbadTAdBgNVHQ4EFgQUszWe8+/8jMCx8sc7TBCsCaE8AM0wJQYDVR0RBB4w
+HIINKi5xbXRoLmNvbS5jboILcW10aC5jb20uY24wDgYDVR0PAQH/BAQDAgWgMB0G
+A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBMBgNVHSAERTBDMDcGCWCGSAGG
+/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
+MAgGBmeBDAECATB1BggrBgEFBQcBAQRpMGcwJgYIKwYBBQUHMAGGGmh0dHA6Ly9z
+dGF0dXMucmFwaWRzc2wuY29tMD0GCCsGAQUFBzAChjFodHRwOi8vY2FjZXJ0cy5y
+YXBpZHNzbC5jb20vUmFwaWRTU0xSU0FDQTIwMTguY3J0MAkGA1UdEwQCMAAwggF/
+BgorBgEEAdZ5AgQCBIIBbwSCAWsBaQB2ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4
++U1dJlwlXceEAAABctq0lOQAAAQDAEcwRQIhAPSyYr571MFGIqag7I8DvDEuofSz
+niYiIpupf2ZPr9uOAiBnDSGW330Kgq4q9DjPlMdyHhOEwxzw4ArL9pEfh5sBogB2
+ACJFRQdZVSRWlj+hL/H3bYbgIyZjrcBLf13Gg1xu4g8CAAABctq0lRIAAAQDAEcw
+RQIgXf8WhjgHtV1FIxcyuvxsE2l4jd8p7an6XMhXC5JdqWsCIQCMpvVpUbwfHBeL
+uW8y1M/Dov5ucb6yVw8tQlVX+gSnEwB3AFGjsPX9AXmcVm24N3iPDKR6zBsny/ee
+iEKaDf7UiwXlAAABctq0lWIAAAQDAEgwRgIhAP1Grc7Mmyy5i6UyNFtvgvCpxyO4
+kxUqheqszgaH8kUyAiEA4PT+hRcN8voF2WAnt8uD8sYRLFwWUIrMsULm1XzLxzMw
+DQYJKoZIhvcNAQELBQADggEBAL8SqYpJGwXgsL4PLO2JC7WEsMIjaMEoC1S3IUNp
+aR6CIW0WCdbokeMrxL1VHKq9vVqc8a7bZAYF+Yx5wXVb3S8prcBZamdWZgb4Ifyy
+NdTBa/pk+h5s3TTPDFl9bmBTDc6id+EPZk5PK3W3halQG/eJULN51PmeBTggaaEe
+0aKvIqp9gCFm8WnuHMFAZ/AKwj5K4JAdGUAJjxZzfxnv1B4fR5XBfqpdVqaxOaZv
+rvUyvmHoSP4+pTE0EUJFnoz9GXZ4TwEbvsGX+G5BkXvOS8dLElpy0s1O+7HgUumA
+RvwfEPEQpQy6U9wQAdSoW7dfAjgwZwoY/Yy74MScKFxij2w=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEsTCCA5mgAwIBAgIQCKWiRs1LXIyD1wK0u6tTSTANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0xNzExMDYxMjIzMzNaFw0yNzExMDYxMjIzMzNaMF4xCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xHTAbBgNVBAMTFFJhcGlkU1NMIFJTQSBDQSAyMDE4MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5S2oihEo9nnpezoziDtx4WWLLCll/e0t1EYemE5n
++MgP5viaHLy+VpHP+ndX5D18INIuuAV8wFq26KF5U0WNIZiQp6mLtIWjUeWDPA28
+OeyhTlj9TLk2beytbtFU6ypbpWUltmvY5V8ngspC7nFRNCjpfnDED2kRyJzO8yoK
+MFz4J4JE8N7NA1uJwUEFMUvHLs0scLoPZkKcewIRm1RV2AxmFQxJkdf7YN9Pckki
+f2Xgm3b48BZn0zf0qXsSeGu84ua9gwzjzI7tbTBjayTpT+/XpWuBVv6fvarI6bik
+KB859OSGQuw73XXgeuFwEPHTIRoUtkzu3/EQ+LtwznkkdQIDAQABo4IBZjCCAWIw
+HQYDVR0OBBYEFFPKF1n8a8ADIS8aruSqqByCVtp1MB8GA1UdIwQYMBaAFAPeUDVW
+0Uy7ZvCj4hsbw5eyPdFVMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEF
+BQcDAQYIKwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB/wIBADA0BggrBgEFBQcBAQQo
+MCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBCBgNVHR8E
+OzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9i
+YWxSb290Q0EuY3JsMGMGA1UdIARcMFowNwYJYIZIAYb9bAECMCowKAYIKwYBBQUH
+AgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCwYJYIZIAYb9bAEBMAgG
+BmeBDAECATAIBgZngQwBAgIwDQYJKoZIhvcNAQELBQADggEBAH4jx/LKNW5ZklFc
+YWs8Ejbm0nyzKeZC2KOVYR7P8gevKyslWm4Xo4BSzKr235FsJ4aFt6yAiv1eY0tZ
+/ZN18bOGSGStoEc/JE4ocIzr8P5Mg11kRYHbmgYnr1Rxeki5mSeb39DGxTpJD4kG
+hs5lXNoo4conUiiJwKaqH7vh2baryd8pMISag83JUqyVGc2tWPpO0329/CWq2kry
+qv66OSMjwulUz0dXf4OHQasR7CNfIr+4KScc6ABlQ5RDF86PGeE6kdwSQkFiB/cQ
+ysNyq0jEDQTkfa2pjmuWtMCNbBnhFXBYejfubIhaUbEv2FOQB3dCav+FPg5eEveX
+TVyMnGo=
+-----END CERTIFICATE-----

+ 59 - 0
nginx/test-192.168.1.91/ssl/ea100/cert.pem

@@ -0,0 +1,59 @@
+-----BEGIN CERTIFICATE-----
+MIIFUzCCBDugAwIBAgISBAqnNJV4IHLCMkJMw5zf7SDgMA0GCSqGSIb3DQEBCwUA
+MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
+ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDA3MjMwMDM5MDVaFw0y
+MDEwMjEwMDM5MDVaMBkxFzAVBgNVBAMMDiouZWExMDAuY29tLmNuMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzRl33Jbvuq+BGcQlsCJrrFbRKxwAuWly
+IisrfdCZCTw7RWBoHtdFwuBkKZsQcfM1KKgaLOKWnj7HyGVszFUXldrsAkdgFaTn
+/TR1czHArLw6oSrqa0PWtOyB0gC1wACOQj/NwL5Z8LBLzxTWZg2NSW5WcQEU4MjQ
+fe17IvsykcRRLAG83KNp5WkRh4ljPDBGDrK1QIajkzB80XDtaID9ooPaajSH7bYD
+nzGJ21F2eq4DapEhS49SSvXBoZ8XRqiEZDKf28HapIDZ9InA1G9ike99jKvTqE1U
+PoQAwO3amR2rbicfLlgdsU7xMtmtY2ZJynyEyhCPX071NZmrFO0TtQIDAQABo4IC
+YjCCAl4wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
+BQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQxNAOVrl3Dq5aeWk+5QBsqQoP2
+AjAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRj
+MGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5v
+cmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5v
+cmcvMBkGA1UdEQQSMBCCDiouZWExMDAuY29tLmNuMEwGA1UdIARFMEMwCAYGZ4EM
+AQIBMDcGCysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0
+c2VuY3J5cHQub3JnMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHYAsh4FzIuizYog
+Todm+Su5iiUgZ2va+nDnsklTLe+LkF4AAAFzeVLwSAAABAMARzBFAiEA8rAxjBa/
+JmAtzaWeA87dxHKwkd/qDu+HcED43J6WNmYCIHZRfikwiPT7bGAIuC95sn6sBV9j
+gShpcZbC+nczyXLtAHUAb1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RMA
+AAFzeVLwgQAABAMARjBEAiB428S3AQOwfvVkKU+/l7+bfa478BFf2TT8MniijySI
+BQIgUUraomldo9SSMpyYcdQgxRVwiIwXkOSytm5PQNU9J9wwDQYJKoZIhvcNAQEL
+BQADggEBACXYYdtdmU+EhlKj+jaIr3BMal+FLrs7ntAsX2CqpNrpoeSiS23zaN8K
+vU9tbK5sIUx+h/662iQZL18NPwovYHerNacDqL2hp9llUOQ5vjYDq57b/3+wpMjt
+xa5mWym6jmCUK+JDsAArxeoLstguOex+lFP16wZsTTVSg89TfOMk3lNVBgZmGLWS
+rA5OW87IwTs5yp4kFvYzpV+QFBGBLZXg7M986jRl29MtPRS0eli2g+6TYnJFhRJo
+3YzmbixRmYBZnHZPkDiqFhM7qmsandUjM8G7EpPLM7kHljgEy3VRihR/fb/smoVH
+jz6s77tqYwFJQ/sL+0g+TbZpIlprJBk=
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
+SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
+GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
+q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
+SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
+Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
+a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
+/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
+AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
+CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
+bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
+c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
+VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
+ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
+MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
+Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
+AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
+uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
+wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
+X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
+PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
+KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
+-----END CERTIFICATE-----

+ 27 - 0
nginx/test-192.168.1.91/ssl/ea100/key.pem

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEAzRl33Jbvuq+BGcQlsCJrrFbRKxwAuWlyIisrfdCZCTw7RWBo
+HtdFwuBkKZsQcfM1KKgaLOKWnj7HyGVszFUXldrsAkdgFaTn/TR1czHArLw6oSrq
+a0PWtOyB0gC1wACOQj/NwL5Z8LBLzxTWZg2NSW5WcQEU4MjQfe17IvsykcRRLAG8
+3KNp5WkRh4ljPDBGDrK1QIajkzB80XDtaID9ooPaajSH7bYDnzGJ21F2eq4DapEh
+S49SSvXBoZ8XRqiEZDKf28HapIDZ9InA1G9ike99jKvTqE1UPoQAwO3amR2rbicf
+LlgdsU7xMtmtY2ZJynyEyhCPX071NZmrFO0TtQIDAQABAoIBAQCHeh08rs7nx+pF
+NNWYRQROsII2Macg0lA71bxCvTl5ajnUl9vvE0/XbBV9jhoMyxQAKRoxL/NB0EJz
+UtvNFSAhMpzW3ILRiT5cePxj/SdCcotfzlNOS19V3yvZpfJoQ3W0uSSV/qa2YB2T
+SjZc7vK24JVky8wYt01RAT9nWfqLYa0OeoyraO2RULlJyOGQLcR3cG54Yu2494zm
+6waHI0iP7mYWJAFjHisqo+MywPAG62htsjU/HgsXfNkDyEKpDd5nxhJ0nPwyoC2H
+OVguk1TvEi9mfQwodpqhZD9w2vsKTjN2J/+vy6zOMkkz4b833tb0bQRQC6zMdO6j
+Q6KFyoq5AoGBAPC104j6jzEeaYXVpeRYau0HCmWmCY816p4H4lw9EhOTsp5hJbeP
+p+94RZ4wJ8H0kHPwpwIZNstV/TZZjOSTguPnqcPp7Oo1xUXCy9/L5ITUJED+1pmO
+jedl1bwNoGdw/nCyJJqzGofAltt/oq7cTxQKJs33Xb6U9d7KJeZFWZ2DAoGBANog
+k9O9bciSNi8Pp162pGe5WBx1MGo3/GyOrnTdvc22c1aSjHUK+LGFJ5DwMpIqq7o2
+lxzn+wIXwUvTJsxmAbwIvk4SvQgW2rUKwQpYpqm8GJJnXkDSQnPQCqtgsuR3NAXm
+b+6VpIa1JpoOsVQTgMNQx920YqteS9KjBtRg/DxnAoGBAMJwbfaJR1/LDDxSz5V7
+oqvi8xAXJkOrruCGx9/waQitVyy+lqQHhAVZpwrYJVV0Q7eT3qRAT9XCmS7s+XWu
+fp2whZ6++GRcmQT4DI2z+t0dLEfgUuNpltEjnpowe7DzQmUwUYcxRC4CcRnPqU8M
+oUgzxxK7TdtkIpQbwK+Yt4IXAoGAeLpJN4uD5NxQExIV780lB6fFBdMy3cdo9eiu
+1E4ajG4sPkFUbj+JUC/Dq2vWgaIOdD1cvAoFmq3tNXuD4OOgmCM6uVmTuJN1r3hp
+ScGxVQafjwCZYUU+tHz0OtCFkwALEiztzN6UNl6zI9d3/HHi9beTN7lsVy8Uxlun
+Hwsi8IcCgYEAmlrU9OXbVwA2HPIcIxmtqqkXzc/U6Tii67FCSEf2CwEEH4g5J1J2
+qnATtWHKk25GMHq12d0l2wFTO3S7ZO1mgHoYgRBeYCc61o8HEp1XA3fLpntazsh1
+5CV+WN6dv7CY7GkH4tsCfh+JiO2NAMVpX0QPRjHUFkcDVz3HDwpqarU=
+-----END RSA PRIVATE KEY-----

+ 10 - 0
pom.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>cn.com.qmth.examcloud</groupId>
+    <artifactId>examcloud-upgrade</artifactId>
+    <version>1.0</version>
+    <packaging>pom</packaging>
+
+</project>

+ 90 - 0
upgrade-201909/basic.sql

@@ -0,0 +1,90 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+-- 新建表EC_B_STUDENT_CODE
+CREATE TABLE `ec_b_student_code` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `identity_number` varchar(255) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `student_code` varchar(255) NOT NULL,
+  `student_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_B_SC_005001` (`root_org_id`,`student_code`),
+  KEY `IDX_B_SC_005002` (`student_id`),
+  KEY `IDX_B_SC_005003` (`student_code`),
+  KEY `IDX_B_SC_005004` (`identity_number`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- 将表EC_B_STUDENT 的student_code字段割接到新表EC_B_STUDENT_CODE 
+insert into ec_b_student_code(root_org_id,student_id,identity_number,student_code,creation_time,update_time)
+SELECT root_org_id, id, identity_number, student_code, NOW(), NOW() from ec_b_student where student_code is not null ;
+
+-- 删除表EC_B_STUDENT的student_code字段
+ALTER  TABLE  ec_b_student   DROP  INDEX  IDX_B_S_002002;
+alter table ec_b_student  drop column student_code;
+
+-- 新建资源表
+CREATE TABLE `ec_b_resource` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `file_path` varchar(255) NOT NULL,
+  `is_file` bit(1) NOT NULL,
+  `name` varchar(255) NOT NULL,
+  `parent_id` bigint(20) DEFAULT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `suffix` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_B_RESOURCE_000002` (`root_org_id`,`file_path`) USING BTREE,
+  KEY `IDX_B_RESOURCE_000001` (`root_org_id`,`parent_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- 新建顶级机构权限关联表
+CREATE TABLE `ec_b_root_org_priv_relation` (
+  `privilege_id` bigint(20) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `group_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`privilege_id`,`root_org_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- 新建短信装配表
+CREATE TABLE `ec_b_sms_assembly` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `destroyed` bit(1) NOT NULL,
+  `enabled` bit(1) NOT NULL,
+  `code` varchar(30) NOT NULL,
+  `example` varchar(200) NOT NULL,
+  `ext1` varchar(200) DEFAULT NULL,
+  `ext10` varchar(200) DEFAULT NULL,
+  `ext2` varchar(200) DEFAULT NULL,
+  `ext3` varchar(200) DEFAULT NULL,
+  `ext4` varchar(200) DEFAULT NULL,
+  `ext5` varchar(200) DEFAULT NULL,
+  `ext6` varchar(200) DEFAULT NULL,
+  `ext7` varchar(200) DEFAULT NULL,
+  `ext8` varchar(200) DEFAULT NULL,
+  `ext9` varchar(200) DEFAULT NULL,
+  `name` varchar(30) NOT NULL,
+  `template` varchar(200) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_B_SMS_021000` (`code`),
+  UNIQUE KEY `IDX_B_SMS_021001` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- 修改app简称. 网考新简称 oe-face oe-student oe-websocket
+update ec_b_app t  set t.simple_name = 'oe-face', t.`name`= 'EC-CORE-OE-FACE' where t.simple_name = 'oe-student-face';
+update ec_b_app t  set t.simple_name = 'oe-student', t.`name`= 'EC-CORE-OE-STUDENT' where t.simple_name = 'oe-student';
+update ec_b_app t  set t.simple_name = 'oe-websocket', t.`name`= 'EC-CORE-OE-WEBSOCKET' where t.simple_name = 'oe-student-websocket';
+
+
+
+
+
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 77 - 0
upgrade-201909/examwork.sql

@@ -0,0 +1,77 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+-- 新增通知相关表
+CREATE TABLE `ec_e_notice` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `content` longtext,
+  `notice_status` varchar(255) NOT NULL,
+  `publish_time` datetime DEFAULT NULL,
+  `publisher` varchar(100) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `title` varchar(100) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `IDX_E_NOTICE_001001` (`root_org_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `ec_e_notice_publish_schedule` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `notice_id` bigint(20) DEFAULT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `publish_status` varchar(255) NOT NULL,
+  `max_common_user_id` bigint(20) DEFAULT NULL,
+  `max_student_id` bigint(20) DEFAULT NULL,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_E_NOTICE_PUBLISH_SCHEDULE_001002` (`root_org_id`,`notice_id`),
+  KEY `IDX_E_NOTICE_PUBLISH_SCHEDULE_001001` (`root_org_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `ec_e_notice_receiver_rule` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `notice_id` bigint(20) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `rule_type` varchar(255) NOT NULL,
+  `rule_value` varchar(100) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `IDX_E_N_RULE_001001` (`root_org_id`),
+  KEY `IDX_E_N_RULE_001002` (`notice_id`),
+  KEY `IDX_E_N_RULE_001003` (`notice_id`,`rule_type`,`rule_value`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `ec_e_notice_rule_publish_progress` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `max_common_user_id` bigint(20) DEFAULT NULL,
+  `max_student_id` bigint(20) DEFAULT NULL,
+  `notice_id` bigint(20) DEFAULT NULL,
+  `notice_receiver_rule_type` varchar(255) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_E_NOTICE_R_P_R_001001` (`notice_id`,`notice_receiver_rule_type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `ec_e_user_notice` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `has_read` bit(1) NOT NULL,
+  `notice_id` bigint(20) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `user_id` bigint(20) NOT NULL,
+  `user_type` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_E_U_NOTICE_001002` (`notice_id`,`user_type`,`user_id`),
+  KEY `IDX_E_U_NOTICE_001001` (`notice_id`),
+  KEY `IDX_E_U_NOTICE_001003` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 24 - 0
upgrade-201909/marking.sql

@@ -0,0 +1,24 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+-- 给分间隔新增表
+CREATE TABLE `ec_m_mark_score_step` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `course_code` varchar(255) NOT NULL,
+  `step` double NOT NULL,
+  `work_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_M_MARK_SCORE_STEP_01` (`work_id`,`course_code`)
+) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
+
+-- 评卷状态,新增字段
+ALTER TABLE `ec_m_mark_work` ADD COLUMN `is_end`  bit(1) NOT NULL;
+
+-- 新增唯一约束,BUG处理:设置评卷员多次点击确定按钮会插入重复的ec_m_mark_range数据
+CREATE UNIQUE INDEX `IDX_M_MARK_RANGE_01` ON `ec_m_mark_range`(`base_paper_id`, `work_id`) USING BTREE ;
+
+
+
+
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 200 - 0
upgrade-201909/oe_sync.sql

@@ -0,0 +1,200 @@
+-- 1.ec_oe_exam_audit表删除旧索引,并添加新索引
+drop index idx_exam_record_data_id on ec_oe_exam_audit;
+alter table ec_oe_exam_audit add UNIQUE INDEX IDX_E_O_E_A_001 (`exam_record_data_id`) USING BTREE;
+
+-- 2.1.ec_oe_exam_capture字段更新
+alter table ec_oe_exam_capture MODIFY `face_compare_result` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '人脸比较返回信息';
+alter table ec_oe_exam_capture MODIFY `faceliveness_result` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '百度在线活体检测结果-3.0新增';
+alter table ec_oe_exam_capture MODIFY `ext_msg` varchar(800) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '其他信息';
+-- 2.2.ec_oe_exam_capture表删除旧索引,并添加新索引
+drop index idx_001 on ec_oe_exam_capture;
+drop index idx_002 on ec_oe_exam_capture;
+alter table ec_oe_exam_capture ADD UNIQUE INDEX IDX_E_O_E_C_001 (`exam_record_data_id`, `file_name` ) USING BTREE;
+alter table ec_oe_exam_capture add index IDX_E_O_E_C_002 (`exam_record_data_id` ) USING BTREE;
+
+-- 3.ec_oe_exam_capture_queue表直接删除重建
+DROP TABLE IF EXISTS `ec_oe_exam_capture_queue`;
+CREATE TABLE `ec_oe_exam_capture_queue`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `student_id` bigint(20) NOT NULL COMMENT '学生ID',
+  `exam_record_data_id` bigint(20) NOT NULL,
+  `base_face_token` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '底照token',
+  `file_url` varchar(150) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '照片的url',
+  `file_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '照片名称',
+  `status` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '待处理,处理中,处理失败',
+  `error_msg` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `error_num` int(11) NOT NULL DEFAULT 0,
+  `has_virtual_camera` bit(1) NULL DEFAULT NULL,
+  `camera_infos` varchar(800) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `ext_msg` varchar(800) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `creation_time` datetime(0) NULL DEFAULT NULL,
+  `update_time` datetime(0) NULL DEFAULT NULL,
+  `process_batch_num` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `face_compare_result` varchar(2000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `priority` int(11) NULL DEFAULT 0,
+  `face_compare_start_time` bigint(20) NULL DEFAULT NULL,
+  `faceliveness_result` varchar(2000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `is_pass` bit(1) NULL DEFAULT NULL,
+  `is_stranger` bit(1) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `IDX_E_O_E_C_Q_001`(`exam_record_data_id`, `file_name`) USING BTREE,
+  INDEX `IDX_E_O_E_C_Q_002`(`status`, `error_num`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
+
+-- 4.ec_oe_exam_face_liveness_verify表删除再重建索引
+drop index idx_001 on ec_oe_exam_face_liveness_verify;
+drop index idx_002 on ec_oe_exam_face_liveness_verify;
+alter table ec_oe_exam_face_liveness_verify add index IDX_E_O_E_F_L_V_001 (`exam_record_data_id`, `is_error` ) USING BTREE;
+
+-- 5.添加新表ec_oe_exam_file_answer_temp
+CREATE TABLE `ec_oe_exam_file_answer_temp`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `exam_record_data_id` bigint(20) NOT NULL,
+  `exam_student_id` bigint(20) NOT NULL,
+  `file_path` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  `question_order` int(11) NOT NULL,
+  `status` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  `transfer_file_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `IDX_E_O_E_F_A_T_001`(`exam_record_data_id`, `exam_student_id`, `question_order`, `file_path`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- 6.1.ec_oe_exam_org_score_handle表字段更新
+alter table ec_oe_exam_org_score_handle MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT;
+alter table ec_oe_exam_org_score_handle MODIFY `root_org_id` bigint(20) NOT NULL;
+-- 6.2.ec_oe_exam_org_score_handle表删除旧索引,清加新索引
+drop index idx_001 on ec_oe_exam_org_score_handle;
+alter table ec_oe_exam_org_score_handle ADD UNIQUE INDEX `IDX_E_O_E_O_S_H_001`(`root_org_id` ) USING BTREE;
+
+-- 7.1.ec_oe_exam_record表字段更新
+alter table ec_oe_exam_record MODIFY `course_id` bigint(20) NOT NULL COMMENT '课程id';
+alter table ec_oe_exam_record MODIFY `root_org_id` bigint(20) NOT NULL COMMENT '顶级机构ID';
+alter table ec_oe_exam_record MODIFY `org_id` bigint(20) NOT NULL COMMENT '学习中心ID';
+alter table ec_oe_exam_record MODIFY `paper_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;
+alter table ec_oe_exam_record MODIFY `info_collector` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '采集人';
+-- 7.2.ec_oe_exam_record表,删除旧索引,添加新索引
+drop index idx_001 on ec_oe_exam_record;
+drop index idx_002 on ec_oe_exam_record;
+drop index idx_003 on ec_oe_exam_record;
+drop index idx_004 on ec_oe_exam_record;
+drop index idx_005 on ec_oe_exam_record;
+drop index idx_006 on ec_oe_exam_record;
+alter table ec_oe_exam_record add index IDX_E_O_E_R_001 (`exam_student_id`) USING BTREE;
+alter table ec_oe_exam_record add index IDX_E_O_E_R_002 (`student_code`) USING BTREE;
+alter table ec_oe_exam_record add index IDX_E_O_E_R_003 (`student_id`, `exam_type`) USING BTREE;
+
+-- 8.1.ec_oe_exam_record_4_marking表字段更新
+alter table ec_oe_exam_record_4_marking MODIFY `course_id` bigint(20) NOT NULL;
+-- 8.2.ec_oe_exam_record_4_marking表删除旧索引,添加新索引
+drop index uniq_001 on ec_oe_exam_record_4_marking;
+drop index idx_002 on ec_oe_exam_record_4_marking;
+drop index idx_003 on ec_oe_exam_record_4_marking;
+alter table ec_oe_exam_record_4_marking ADD UNIQUE INDEX IDX_E_O_E_R_4_M_001 (`exam_record_data_id`) USING BTREE;
+alter table ec_oe_exam_record_4_marking add INDEX IDX_E_O_E_R_4_M_002 (`exam_id`) USING BTREE;
+alter table ec_oe_exam_record_4_marking add INDEX IDX_E_O_E_R_4_M_003 (`exam_student_id`) USING BTREE;
+
+-- 9.1.ec_oe_exam_record_data表字段更新
+alter table ec_oe_exam_record_data MODIFY `is_warn` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否是异常数据';
+alter table ec_oe_exam_record_data MODIFY `is_audit` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否被审核过';
+alter table ec_oe_exam_record_data MODIFY `is_illegality` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否违纪';
+alter table ec_oe_exam_record_data MODIFY `is_reexamine` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否为重考';
+alter table ec_oe_exam_record_data MODIFY `is_continued` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否存在断点续考';
+alter table ec_oe_exam_record_data MODIFY `is_all_objective_paper` bit(1) NULL DEFAULT NULL COMMENT '本次的试卷是否是全客观题卷';
+alter table ec_oe_exam_record_data ADD COLUMN `exam_record_questions_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL;
+-- 9.2.ec_oe_exam_record_data表删除外键约束
+alter table ec_oe_exam_record_data drop foreign key FKj4vu1t2fb85iefm7pwymi2evo;
+alter table ec_oe_exam_record_data drop foreign key fk_exam_record_id;
+-- 9.3.ec_oe_exam_record_data表删除旧索引,添加新索引
+drop index uniq_01 on ec_oe_exam_record_data;
+drop index idx_02 on ec_oe_exam_record_data;
+drop index idx_03 on ec_oe_exam_record_data;
+alter table ec_oe_exam_record_data ADD UNIQUE INDEX IDX_E_O_E_R_D_001 (`exam_record_id`) USING BTREE;
+alter table ec_oe_exam_record_data add INDEX IDX_E_O_E_R_D_002 (`exam_record_status`) USING BTREE;
+
+
+-- 10.ec_oe_exam_score表删除旧索引,添加新索引
+drop index idx_exam_record_data_id on ec_oe_exam_score;
+alter table ec_oe_exam_score ADD UNIQUE INDEX IDX_E_O_E_S_001 (`exam_record_data_id`) USING BTREE;
+
+-- 11.1.ec_oe_exam_score_obtain_queue表字段更新
+alter table ec_oe_exam_score_obtain_queue MODIFY `exam_id` bigint(20) NOT NULL;
+alter table ec_oe_exam_score_obtain_queue MODIFY `is_valid` bit(1) NOT NULL COMMENT '是否有效';
+-- 11.2.ec_oe_exam_score_obtain_queue表删除旧索引,添加新索引
+drop index idx_001 on ec_oe_exam_score_obtain_queue;
+drop index idx_002 on ec_oe_exam_score_obtain_queue;
+drop index idx_003 on ec_oe_exam_score_obtain_queue;
+alter table ec_oe_exam_score_obtain_queue add INDEX `IDX_E_O_E_S_O_Q_001`(`exam_record_data_id`) USING BTREE;
+alter table ec_oe_exam_score_obtain_queue add INDEX IDX_E_O_E_S_O_Q_002 (`root_org_id`, `is_valid`) USING BTREE;
+alter table ec_oe_exam_score_obtain_queue add INDEX IDX_E_O_E_S_O_Q_003(`exam_id`) USING BTREE;
+
+-- 12.1.ec_oe_exam_score_push_queue表字段更新
+alter table ec_oe_exam_score_push_queue MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT;
+alter table ec_oe_exam_score_push_queue MODIFY `exam_id` bigint(20) NOT NULL COMMENT '考试ID';
+alter table ec_oe_exam_score_push_queue MODIFY `exam_record_id` bigint(20) NOT NULL COMMENT '考试记录ID';
+alter table ec_oe_exam_score_push_queue MODIFY `exam_score_id` bigint(20) NOT NULL COMMENT '考试分数ID';
+alter table ec_oe_exam_score_push_queue MODIFY `root_org_id` bigint(20) NOT NULL COMMENT '学校ID';
+alter table ec_oe_exam_score_push_queue MODIFY `exam_id` bigint(20) NOT NULL COMMENT '考试ID';
+-- 12.2.ec_oe_exam_score_push_queue表删除旧索引,添加新索引
+drop index idx_01 on ec_oe_exam_score_push_queue;
+drop index uniq_002 on ec_oe_exam_score_push_queue;
+drop index uniq_003 on ec_oe_exam_score_push_queue;
+alter table ec_oe_exam_score_push_queue add INDEX `IDX_E_O_E_S_P_Q_001`(`status`) USING BTREE;
+alter table ec_oe_exam_score_push_queue ADD UNIQUE INDEX `IDX_E_O_E_S_P_Q_002`(`exam_record_id`) USING BTREE;
+alter table ec_oe_exam_score_push_queue ADD UNIQUE INDEX `IDX_E_O_E_S_P_Q_003`(`exam_score_id`) USING BTREE;
+
+-- 13.1.ec_oe_exam_student表字段更新
+alter table ec_oe_exam_student MODIFY `info_collector` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '采集人';
+alter table ec_oe_exam_student MODIFY `grade` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL;
+-- 13.2.ec_oe_exam_student表删除旧索引,添加新索引
+drop index idx_001 on ec_oe_exam_student;
+drop index idx_002 on ec_oe_exam_student;
+drop index idx_003 on ec_oe_exam_student;
+drop index idx_004 on ec_oe_exam_student;
+drop index idx_005 on ec_oe_exam_student;
+alter table ec_oe_exam_student ADD UNIQUE INDEX `IDX_E_O_E_S_001`(`exam_student_id`) USING BTREE;
+alter table ec_oe_exam_student add INDEX `IDX_E_O_E_S_002`(`student_id`) USING BTREE;
+alter table ec_oe_exam_student add INDEX `IDX_E_O_E_S_003`(`identity_number`) USING BTREE;
+alter table ec_oe_exam_student add INDEX `IDX_E_O_E_S_004`(`student_code`) USING BTREE;
+alter table ec_oe_exam_student add INDEX `IDX_E_O_E_S_005`(`exam_id`) USING BTREE;
+
+-- 14.添加新表ec_oe_examing_record
+CREATE TABLE `ec_oe_examing_record`  (
+  `id` bigint(20) NOT NULL,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `exam_record_data_id` bigint(20) NULL DEFAULT NULL,
+  `student_id` bigint(20) NULL DEFAULT NULL,
+  `is_exceed` bit(1) NULL DEFAULT NULL,
+  `continued_count` int(11) NULL DEFAULT NULL,
+  `exam_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `is_continued` bit(1) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `IDX_E_O_E_R_001`(`exam_record_data_id`) USING BTREE,
+  INDEX `IDX_E_O_E_R_002`(`student_id`) USING BTREE,
+  INDEX `IDX_E_O_E_R_003`(`exam_type`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+
+-- 15.添加新表ec_oe_hand_in_exam_record
+CREATE TABLE `ec_oe_hand_in_exam_record`  (
+  `id` bigint(20) NOT NULL,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `exam_record_data_id` bigint(20) NOT NULL,
+  `student_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `IDX_E_O_H_I_E_R_001`(`exam_record_data_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+
+
+
+
+
+
+
+
+
+

+ 53 - 0
upgrade-201909/question.sql

@@ -0,0 +1,53 @@
+
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+##MongoDB 属性相关迁移脚本
+
+##将 paperStruct 表相关字段类型由Long改为String
+
+db.paperStruct.find().forEach( function (doc) {
+	if(doc.coursePropertyId !=null || doc.paperDetailStructs!=null){
+		if(doc.coursePropertyId !=null){
+			doc.coursePropertyId=doc.coursePropertyId+"";
+		}
+		if(doc.paperDetailStructs!=null){
+			doc.paperDetailStructs.forEach( function (detail) {
+				if(detail.coursePropertyNumberDtos!=null){
+					detail.coursePropertyNumberDtos.forEach( function (courseProperty) {
+						courseProperty._id=courseProperty._id+"";
+						courseProperty.propertyParentId=courseProperty.propertyParentId+"";
+						courseProperty.propertyId=courseProperty.propertyId+"";
+					});
+				}
+			});
+		}
+		db.paperStruct.save(doc);
+	}
+});
+
+##将 question 表相关字段类型由Long改为String
+
+db.question.find().forEach( function (doc) {
+	if(doc.quesProperties !=null){
+		doc.quesProperties.forEach( function (pros) {
+			if(pros.firstProperty !=null){
+				pros.firstProperty._id=pros.firstProperty._id+"";
+				pros.firstProperty.coursePropertyId=pros.firstProperty.coursePropertyId+"";
+				pros.firstProperty.parentId=pros.firstProperty.parentId+"";
+			}
+			if(pros.secondProperty !=null){
+				pros.secondProperty._id=pros.secondProperty._id+"";
+				pros.secondProperty.coursePropertyId=pros.secondProperty.coursePropertyId+"";
+				pros.secondProperty.parentId=pros.secondProperty.parentId+"";
+			}
+		});
+		db.question.save(doc);
+	}
+});
+
+
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+
+
+

+ 19 - 0
upgrade-201909/task.sql

@@ -0,0 +1,19 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+-- 新增通知相关表
+CREATE TABLE `ec_t_reports_compute` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `end_time` datetime DEFAULT NULL,
+  `error_desc` varchar(255) DEFAULT NULL,
+  `project_id` bigint(20) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `start_time` datetime DEFAULT NULL,
+  `status` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `IDX_T_REPORTS_COMPUTE_01` (`project_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 75 - 0
upgrade-201911/examwork.sql

@@ -0,0 +1,75 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+RENAME TABLE ec_e_exam_special_settings TO ec_e_exam_special_settings_bak;
+
+CREATE TABLE `ec_e_exam_special_settings` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `root_org_id` bigint(20) NOT NULL,
+  `exam_id` bigint(20) NOT NULL,
+  `exam_type` varchar(255) NOT NULL,
+  `org_id` bigint(20) DEFAULT NULL,
+  `course_id` bigint(20) DEFAULT NULL,
+  `student_id` bigint(20) DEFAULT NULL,
+  `begin_time` datetime DEFAULT NULL,
+  `end_time` datetime DEFAULT NULL,
+  `creation_time` datetime DEFAULT NULL,
+  `update_time` datetime DEFAULT NULL,
+  `exam_enable` bit(1) NOT NULL,
+  `exam_limit` bit(1) NOT NULL,
+  `special_settings_enabled` bit(1) NOT NULL,
+  `special_settings_type` varchar(255) DEFAULT NULL,
+  `ext1` varchar(255) DEFAULT NULL,
+  `ext2` varchar(255) DEFAULT NULL,
+  `ext3` varchar(255) DEFAULT NULL,
+  `ext4` varchar(255) DEFAULT NULL,
+  `ext5` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_E_E_S_S_001001` (`exam_id`,`course_id`,`org_id`,`student_id`) USING BTREE,
+  KEY `IDX_E_E_S_S_001002` (`exam_id`,`course_id`),
+  KEY `IDX_E_E_S_S_001003` (`exam_id`,`org_id`),
+  KEY `IDX_E_E_S_S_001004` (`exam_id`,`student_id`),
+  KEY `IDX_E_E_S_S_001005` (`root_org_id`,`course_id`),
+  KEY `IDX_E_E_S_S_001006` (`root_org_id`,`org_id`),
+  KEY `IDX_E_E_S_S_001007` (`root_org_id`,`student_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+INSERT INTO ec_e_exam_special_settings (
+	id,
+	root_org_id,
+	exam_id,
+	exam_type,
+	org_id,
+	course_id,
+	student_id,
+	begin_time,
+	end_time,
+	creation_time,
+	update_time,
+	exam_enable,
+	exam_limit,
+	special_settings_enabled,
+	special_settings_type 
+) SELECT
+id,
+root_org_id,
+exam_id,
+exam_type,
+org_id,
+course_id,
+student_id,
+begin_time,
+end_time,
+creation_time,
+update_time,
+exam_enable,
+exam_limit,
+1,
+'ORG_BASED' 
+FROM
+	ec_e_exam_special_settings_bak;
+	
+DROP TABLE ec_e_exam_special_settings_bak;
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 24 - 0
upgrade-201911/marking.sql

@@ -0,0 +1,24 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+--新增字段,记录网考重审操作触发阅卷追加的时间戳
+ALTER TABLE `ec_m_mark_work` ADD COLUMN `append_time`  bigint(20) NULL DEFAULT NULL;
+
+--新增索引
+CREATE INDEX `IDX_M_MARK_WORK_001` ON `ec_m_mark_work`(`root_org_id`, `exam_id`) USING BTREE ;
+
+CREATE INDEX `IDX_M_MARK_ITEM_001` ON `ec_m_mark_item`(`work_id`, `base_paper_id`, `question_id`, `main_number`, `sub_number`, `orders`) USING BTREE ;
+
+--新增表,评卷工作可选多个考试
+CREATE TABLE `ec_m_mark_work_exam` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `exam_id` bigint(20) DEFAULT NULL,
+  `work_id` bigint(20) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_M_MARK_WORK_EXAM_001` (`work_id`,`exam_id`),
+  KEY `IDX_M_MARK_WORK_EXAM_002` (`exam_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+--老数据处理,评卷工作可选多个考试
+INSERT INTO  ec_m_mark_work_exam(work_id,exam_id)  SELECT   id,exam_id  FROM ec_m_mark_work;
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 76 - 0
upgrade-201911/oe.sql

@@ -0,0 +1,76 @@
+/*
+脚本执行说明:
+1.第一步执行 updatePushScore.sql,用于更新旧表中对examRecordId的引用
+2.第二步,将ec_oe_exam_record和ec_oe_exam_record_data表,分别更新为ec_oe_exam_record_bak和ec_oe_exam_record_data_bak
+3.第三步,执行ec_oe_exam_record_data.sql
+4.第四步,执行切数据的程序
+
+*/
+-- 1.新加字段exam_record_data_id
+alter table ec_oe_exam_score_push_queue ADD COLUMN `exam_record_data_id` bigint(20) Not NULL DEFAULT 0;
+-- 2.更新exam_record_data_id的数据
+update ec_oe_exam_score_push_queue t1 set t1.exam_record_data_id=(select id from ec_oe_exam_record_data where exam_record_id=t1.exam_record_id);
+-- 3.删除无用的exam_record_id
+ALTER table ec_oe_exam_score_push_queue drop `exam_record_id`;
+
+
+/*
+脚本执行说明:
+1.第一步执行 updatePushScore.sql,用于更新旧表中对examRecordId的引用
+2.第二步,将ec_oe_exam_record和ec_oe_exam_record_data表,分别更新为ec_oe_exam_record_bak和ec_oe_exam_record_data_bak
+3.第三步,执行ec_oe_exam_record_data.sql
+4.第四步,执行切数据的程序
+
+*/
+
+CREATE TABLE `ec_oe_exam_record_data`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `root_org_id` bigint(20) NULL DEFAULT NULL,
+  `org_id` bigint(20) NULL DEFAULT NULL,  
+  `exam_id` bigint(20) NULL DEFAULT NULL,
+  `exam_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `course_id` bigint(20) NULL DEFAULT NULL,  
+  `course_level` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `exam_student_id` bigint(20) NULL DEFAULT NULL,  
+  `student_id` bigint(20) NULL DEFAULT NULL,
+  `student_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `student_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `identity_number` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `base_paper_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `paper_struct_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `paper_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `exam_record_questions_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `exam_record_status` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
+  `start_time` datetime(0) NULL DEFAULT NULL,  
+  `used_exam_time` bigint(20) NULL DEFAULT NULL,   
+  `is_illegality` bit(1) NULL DEFAULT NULL,
+  `is_warn` bit(1) NULL DEFAULT NULL,
+  `is_audit` bit(1) NULL DEFAULT NULL,
+  `is_reexamine` bit(1) NULL DEFAULT NULL,
+  `is_continued` bit(1) NULL DEFAULT NULL,
+  `continued_count` int(11) NULL DEFAULT NULL,
+  `is_exceed` bit(1) NULL DEFAULT NULL,     
+  `is_all_objective_paper` bit(1) NULL DEFAULT NULL,
+  `clean_time` datetime(0) NULL DEFAULT NULL,  
+  `end_time` datetime(0) NULL DEFAULT NULL,  
+  `exam_order` int(11) NULL DEFAULT NULL,
+  `baidu_face_liveness_success_percent` double NULL DEFAULT NULL,       
+  `face_failed_count` int(11) NULL DEFAULT NULL,
+  `face_landmark_val` double NULL DEFAULT NULL,
+  `face_stranger_count` int(11) NULL DEFAULT NULL,
+  `face_success_count` int(11) NULL DEFAULT NULL,
+  `face_success_percent` double NULL DEFAULT NULL,
+  `face_total_count` int(11) NULL DEFAULT NULL,
+  `face_verify_result` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,  
+  `info_collector` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,  
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,  
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `IDX_E_O_E_R_D_001`(`exam_student_id`) USING BTREE,
+  INDEX `IDX_E_O_E_R_D_002`(`student_code`) USING BTREE,
+  INDEX `IDX_E_O_E_R_D_003`(`student_id`, `exam_type`) USING BTREE,
+  INDEX `IDX_E_O_E_R_D_004`(`exam_id`) USING BTREE,
+  INDEX `IDX_E_O_E_R_D_005`(`course_id`) USING BTREE,
+  INDEX `IDX_E_O_E_R_D_006`(`exam_record_status`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
+

+ 23 - 0
upgrade-202001/baisc.sql

@@ -0,0 +1,23 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+truncate table `ec_b_app`;
+
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (1, '2018-06-12 15:08:22', '2018-06-12 15:08:25', 'B', 'EC-CORE-BASIC', '123456', 'basic', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (2, '2018-06-12 15:08:52', '2018-06-12 15:08:55', 'E', 'EC-CORE-EXAMWORK', '123456', 'examwork', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (3, '2018-06-12 15:08:22', '2018-06-12 15:08:25', 'Q', 'EC-CORE-QUESTION', '123456', 'question', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (4, '2018-06-12 15:08:22', '2018-06-12 15:08:25', 'OE', 'EC-CORE-OE-ADMIN', '123456', 'oe-admin', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (5, '2018-06-12 15:08:22', '2018-06-12 15:08:25', 'OES', 'EC-CORE-OE-STUDENT', '123456', 'oe-student', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (6, '2018-06-19 12:37:48', '2018-06-19 12:37:50', 'OET', 'EC-CORE-OE-TASK', '123456', 'oe-task', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (7, '2018-12-06 11:48:13', '2018-12-06 11:48:13', 'WS', 'EC-WEBSOCKET', '123456', 'websocket', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (8, '2019-05-05 12:54:56', '2019-05-05 12:54:59', 'LM', 'EC-LOGIC-MARKING', '123456', 'logic-marking', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (9, '2019-05-05 12:56:23', '2019-05-05 12:56:26', 'M', 'EC-CORE-MARKING', '123456', 'marking', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (10, '2019-05-05 12:56:55', '2019-05-05 12:56:57', 'T', 'EC-TASK', '123456', 'task', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (11, '2019-05-05 12:57:12', '2019-05-05 12:57:14', 'EX', 'EC-EXCHANGE', '123456', 'exchange', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (12, '2019-05-05 12:57:49', '2019-05-05 12:57:51', 'P', 'EC-CORE-PRINT', '123456', 'print', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (13, '2019-05-05 12:58:27', '2019-05-05 12:58:29', 'API', 'EC-APP-API', '123456', 'app-api', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (14, '2019-05-05 14:34:16', '2019-05-05 14:34:18', 'D', 'EC-EXCHANGE-DOCK', '123456', 'exchange-dock', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (15, '2019-11-01 13:57:22', '2019-11-01 13:57:25', 'R', 'EC-CORE-REPORTS', '123456', 'reports', 1000000);
+INSERT INTO `ec_b_app`(`id`, `creation_time`, `update_time`, `code`, `name`, `secret_key`, `simple_name`, `time_range`) VALUES (16, '2019-11-01 13:58:04', '2019-11-01 13:58:07', 'BRG', 'EC-BRIDGE', '123456', 'bridge', 1000000);
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 8 - 0
upgrade-202001/examwork.sql

@@ -0,0 +1,8 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+DELETE from ec_e_exam_special_settings where student_id is not null;
+
+
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 59 - 0
upgrade-202001/nginx变化.txt

@@ -0,0 +1,59 @@
+nginx 变化
+
+
+nginx.conf
+
+upstream oe-task {
+	server 192.168.1.76:8002;
+}
+
+upstream ws {
+	server 192.168.1.76:8010;
+# server 192.168.1.75:8010;
+}
+
+
+-------80端口-------
+
+1.新增
+location ^~ /api/exchange/outer/ {
+	 proxy_pass http://exchange;
+	 proxy_set_header X-Real-IP $remote_addr;
+	 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+}
+
+
+2.新增
+location ^~ /cmcClient/ {
+	proxy_pass http://bridge;
+	proxy_set_header X-Real-IP $remote_addr;
+	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+}
+
+-------8878端口------
+
+1.新增
+location ^~ /api/ws/ {
+	proxy_pass http://ws;
+	proxy_http_version 1.1;
+	proxy_connect_timeout 60s;
+	proxy_read_timeout 3600s;
+	proxy_send_timeout 12s;
+	proxy_set_header Upgrade $http_upgrade;
+	proxy_set_header Connection "upgrade";
+}
+
+-------8900端口------
+
+1.新增
+location ^~ /api/ecs_exam_work/ {
+    proxy_pass http://examwork;
+	proxy_set_header X-Real-IP $remote_addr;
+	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+}
+	
+	
+	
+
+
+

+ 46 - 0
upgrade-202001/oe-admin.sql

@@ -0,0 +1,46 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+CREATE TABLE `ec_oe_exam_record_data_sync` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`cache_id` BIGINT (20) NULL DEFAULT NULL,
+	`db_id` BIGINT (20) NULL DEFAULT NULL,
+	PRIMARY KEY (`id`),
+	UNIQUE INDEX `IDX_E_O_E_R_D_S_001` (`cache_id`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+ALTER TABLE `ec_oe_exam_student` ADD COLUMN `extra_num` INT (11) NULL DEFAULT NULL AFTER `student_name`;
+
+ALTER TABLE `ec_oe_exam_student` ADD COLUMN `used_num` INT (11) NULL DEFAULT NULL AFTER `extra_num`;
+
+ALTER TABLE `ec_oe_exam_student` DROP COLUMN `normal_exam_times`;
+
+ALTER TABLE `ec_oe_exam_student` DROP COLUMN `is_reexamine`;
+
+ALTER TABLE `ec_oe_exam_student` DROP COLUMN `reexamine_completed`;
+
+CREATE TABLE `ec_oe_exam_student_final_score` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`exam_record_data_id` BIGINT (20) NOT NULL,
+	`exam_student_id` BIGINT (20) NOT NULL,
+	`objective_accuracy` DOUBLE NULL DEFAULT NULL,
+	`objective_score` DOUBLE NULL DEFAULT NULL,
+	`subjective_score` DOUBLE NULL DEFAULT NULL,
+	`succ_percent` DOUBLE NULL DEFAULT NULL,
+	`total_score` DOUBLE NULL DEFAULT NULL,
+	PRIMARY KEY (`id`),
+	UNIQUE INDEX `IDX_E_O_E_S_F_S_001` (`exam_student_id`) USING BTREE,
+	INDEX `IDX_E_O_E_S_F_S_002` (`exam_record_data_id`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- 初始化考生表中新加字段的值
+update ec_oe_exam_student set used_num=0  where used_num is null;
+update ec_oe_exam_student set  extra_num=0 where extra_num is null;
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 152 - 0
upgrade-202001/oe-student.sql

@@ -0,0 +1,152 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+CREATE TABLE `ec_oes_exam_face_biopsy` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`error_msg` VARCHAR (500) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `exam_record_data_id` BIGINT (20) NOT NULL,
+ `result` bit (1) NULL DEFAULT NULL,
+ `root_org_id` BIGINT (20) NOT NULL,
+ `verified_times` INT (11) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE INDEX `IDX_E_F_B_001001` (`exam_record_data_id`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+CREATE TABLE `ec_oes_exam_face_biopsy_item` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`completed` bit (1) NOT NULL,
+	`error_msg` VARCHAR (500) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `exam_record_data_id` BIGINT (20) NOT NULL,
+ `face_biopsy_id` BIGINT (20) NOT NULL,
+ `face_biopsy_type` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NOT NULL,
+ `in_freeze_time` bit (1) NOT NULL,
+ `result` bit (1) NULL DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ INDEX `IDX_E_F_B_I_001001` (`exam_record_data_id`) USING BTREE,
+ INDEX `IDX_E_F_B_I_001002` (`face_biopsy_id`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+CREATE TABLE `ec_oes_exam_face_biopsy_item_step` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`action` VARCHAR (20) CHARACTER
+SET utf8 COLLATE utf8_general_ci NOT NULL,
+ `action_stay` INT (11) NULL DEFAULT NULL,
+ `error_msg` VARCHAR (500) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `exam_record_data_id` BIGINT (20) NOT NULL,
+ `ext1` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `ext2` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `ext3` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `ext4` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `ext5` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `face_biopsy_item_id` BIGINT (20) NOT NULL,
+ `resource_relative_path` VARCHAR (200) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `resource_type` VARCHAR (20) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `result` bit (1) NULL DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ INDEX `IDX_E_F_B_I_S_001001` (`exam_record_data_id`) USING BTREE,
+ INDEX `IDX_E_F_B_I_S_001002` (`face_biopsy_item_id`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+CREATE TABLE `ec_oes_exam_face_liveness_verify` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`biz_id` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `error_msg` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `exam_record_data_id` BIGINT (20) NULL DEFAULT NULL,
+ `is_error` bit (1) NULL DEFAULT NULL,
+ `operate_num` INT (11) NULL DEFAULT NULL,
+ `result_json` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `start_time` datetime NULL DEFAULT NULL,
+ `used_time` BIGINT (20) NULL DEFAULT NULL,
+ `verify_result` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ INDEX `IDX_E_O_E_F_L_V_001` (
+	`exam_record_data_id`,
+	`is_error`
+) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+CREATE TABLE `ec_oes_exam_record_data` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`baidu_face_liveness_success_percent` DOUBLE NULL DEFAULT NULL,
+	`base_paper_id` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `batch_num` BIGINT (20) NULL DEFAULT NULL,
+ `clean_time` datetime NULL DEFAULT NULL,
+ `continued_count` INT (11) NULL DEFAULT NULL,
+ `course_id` BIGINT (20) NULL DEFAULT NULL,
+ `end_time` datetime NULL DEFAULT NULL,
+ `exam_id` BIGINT (20) NULL DEFAULT NULL,
+ `exam_record_status` VARCHAR (20) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `exam_student_id` BIGINT (20) NULL DEFAULT NULL,
+ `exam_type` VARCHAR (20) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `face_failed_count` INT (11) NULL DEFAULT NULL,
+ `face_stranger_count` INT (11) NULL DEFAULT NULL,
+ `face_success_count` INT (11) NULL DEFAULT NULL,
+ `face_success_percent` DOUBLE NULL DEFAULT NULL,
+ `face_total_count` INT (11) NULL DEFAULT NULL,
+ `face_verify_result` VARCHAR (20) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `hand_in_exam_type` VARCHAR (20) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `is_all_objective_paper` bit (1) NULL DEFAULT NULL,
+ `is_audit` bit (1) NULL DEFAULT NULL,
+ `is_continued` bit (1) NULL DEFAULT NULL,
+ `is_exceed` bit (1) NULL DEFAULT NULL,
+ `is_illegality` bit (1) NULL DEFAULT NULL,
+ `is_warn` bit (1) NULL DEFAULT NULL,
+ `objective_accuracy` DOUBLE NULL DEFAULT NULL,
+ `objective_score` DOUBLE NULL DEFAULT NULL,
+ `org_id` BIGINT (20) NULL DEFAULT NULL,
+ `paper_type` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `question_count` INT (11) NULL DEFAULT NULL,
+ `root_org_id` BIGINT (20) NULL DEFAULT NULL,
+ `start_time` datetime NULL DEFAULT NULL,
+ `student_id` BIGINT (20) NULL DEFAULT NULL,
+ `subjective_score` DOUBLE NULL DEFAULT NULL,
+ `succ_percent` DOUBLE NULL DEFAULT NULL,
+ `sync_status` VARCHAR (20) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `total_score` DOUBLE NULL DEFAULT NULL,
+ `used_exam_time` BIGINT (20) NULL DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ INDEX `IDX_E_O_E_R_D_001` (`exam_student_id`) USING BTREE,
+ INDEX `IDX_E_O_E_R_D_002` (`student_id`) USING BTREE,
+ INDEX `IDX_E_O_E_R_D_003` (`exam_id`) USING BTREE,
+ INDEX `IDX_E_O_E_R_D_004` (`course_id`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 113 - 0
upgrade-202001/oe-task.sql

@@ -0,0 +1,113 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+CREATE TABLE `ec_oet_exam_capture` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`camera_infos` VARCHAR (800) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `exam_record_data_id` BIGINT (20) NULL DEFAULT NULL,
+ `ext_msg` VARCHAR (800) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `face_compare_result` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `faceliveness_result` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `file_name` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `file_url` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `has_virtual_camera` bit (1) NULL DEFAULT NULL,
+ `is_pass` bit (1) NULL DEFAULT NULL,
+ `is_stranger` bit (1) NULL DEFAULT NULL,
+ `landmark` VARCHAR (4000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `process_time` BIGINT (20) NULL DEFAULT NULL,
+ `used_time` BIGINT (20) NULL DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE INDEX `IDX_E_O_E_C_001` (
+	`exam_record_data_id`,
+	`file_name`
+) USING BTREE,
+ INDEX `IDX_E_O_E_C_002` (`exam_record_data_id`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+CREATE TABLE `ec_oet_exam_capture_queue` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`base_face_token` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `camera_infos` VARCHAR (800) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `error_msg` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `error_num` INT (11) NULL DEFAULT NULL,
+ `exam_record_data_id` BIGINT (20) NULL DEFAULT NULL,
+ `ext_msg` VARCHAR (800) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `face_compare_result` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `face_compare_start_time` BIGINT (20) NULL DEFAULT NULL,
+ `faceliveness_result` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `file_name` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `file_url` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `has_virtual_camera` bit (1) NULL DEFAULT NULL,
+ `is_pass` bit (1) NULL DEFAULT NULL,
+ `is_stranger` bit (1) NULL DEFAULT NULL,
+ `priority` INT (11) NOT NULL,
+ `process_batch_num` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `status` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `student_id` BIGINT (20) NULL DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE INDEX `IDX_E_O_E_C_Q_001` (
+	`exam_record_data_id`,
+	`file_name`
+) USING BTREE,
+ INDEX `IDX_E_O_E_C_Q_002` (`status`, `error_num`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+CREATE TABLE `ec_oet_exam_sync_capture` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`creation_time` datetime NOT NULL,
+	`update_time` datetime NOT NULL,
+	`camera_infos` VARCHAR (800) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `exam_record_data_id` BIGINT (20) NULL DEFAULT NULL,
+ `ext_msg` VARCHAR (800) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `face_compare_result` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `faceliveness_result` VARCHAR (2000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `file_name` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `file_url` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `has_virtual_camera` bit (1) NULL DEFAULT NULL,
+ `is_pass` bit (1) NULL DEFAULT NULL,
+ `is_stranger` bit (1) NULL DEFAULT NULL,
+ `landmark` VARCHAR (4000) CHARACTER
+SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `process_time` BIGINT (20) NULL DEFAULT NULL,
+ `used_time` BIGINT (20) NULL DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE INDEX `IDX_E_O_E_C_001` (
+	`exam_record_data_id`,
+	`file_name`
+) USING BTREE,
+ INDEX `IDX_E_O_E_C_002` (`exam_record_data_id`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 28 - 0
upgrade-202001/question.sql

@@ -0,0 +1,28 @@
+----------------------------------------------------------------后端服务启动前执行-----------------------------------------------------------------------------------------
+--题库新增试卷导出模板表
+CREATE TABLE `ec_q_export_template` (
+	`id` BIGINT (20) NOT NULL AUTO_INCREMENT,
+	`create_user` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NOT NULL,
+ `creation_time` datetime NOT NULL,
+ `enable` bit (1) NOT NULL,
+ `file_key` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NOT NULL,
+ `file_name` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NOT NULL,
+ `file_path` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NOT NULL,
+ `root_org_id` BIGINT (20) NOT NULL,
+ `suffix` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NOT NULL,
+ `type` VARCHAR (255) CHARACTER
+SET utf8 COLLATE utf8_general_ci NOT NULL,
+ PRIMARY KEY (`id`),
+ INDEX `IDX_Q_EXPORT_TEMPLATE_01` (`root_org_id`) USING BTREE
+) ENGINE = INNODB DEFAULT CHARACTER
+SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+
+----------------------------------------------------------------后端服务启动后执行------------------------------------------------------------------------------------------
+
+

+ 30 - 0
upgrade-202001/备注.txt

@@ -0,0 +1,30 @@
+1.待升级的服务
+EC-BRIDGE	
+EC-CORE-BASIC	
+EC-CORE-EXAMWORK	
+EC-CORE-MARKING	
+EC-CORE-OE-ADMIN	
+EC-CORE-OE-STUDENT
+EC-CORE-OE-TASK (即原来的EC-CORE-OE-FACE)	
+EC-CORE-QUESTION
+EC-EXCHANGE	
+EC-LOGIC-MARKING
+EC-TASK	
+EC-WEBSOCKET(新程序名叫examcloud-ws,服务名未变)
+
+2.升级流程
+2.1.升级之前需要更改参数配置STU_CLIENT_LOGIN_LIMIT=true,COMMON_LOGIN_LIMIT=true.用于限制用户登录考试,但不影响已处于登录状态的用户
+2.2.先执行完所有脚本,再启动服务
+2.3.配置参数
+2.3.1.modify:  名称:orgPropertyGroup.config4Edit1 参数值:末尾追加 ,ID_NUMBER_PRIVATE_MODE
+2.3.2.modify:  名称:orgPropertyGroup.config4Edit3 参数值:末尾追加 ,LOGIN_SUPPORT
+2.3.2.modify:  名称:orgPropertyGroup.studentClientConfig 参数值:末尾追加 ,LOGIN_SUPPORT
+
+2.3.3.add   :  名称:filestorage.type 参数值:ALIYUN
+
+
+3.相较于压测版本主要功能变更
+3.1.添加多媒体阅卷接口
+3.2.云存储相关功能
+3.3.其它细节调整及bug修复
+

+ 30 - 0
upgrade-202001/阿里云账号配置.txt

@@ -0,0 +1,30 @@
+配置中心application.properties文件追加以下配置
+
+---------------测试环境---------------------
+#阿里云账号1账号信息
+$aliyun.site.1.bucket=examcloud-test
+$aliyun.site.1.ossEndpoint=https://oss-cn-shenzhen.aliyuncs.com
+$aliyun.site.1.accessKeyId=LTAI4FboXLCJzrjVo5dUoXaU
+$aliyun.site.1.accessKeySecret=O0my6eSAl1Ic62WvxEf3WlMXox1LNX
+$aliyun.site.1.domain=http://examcloud-test.oss-cn-shenzhen.aliyuncs.com
+
+#又拍云账号数,初始化账号信息用
+$upyun.site.num=1
+#阿里云账号数,初始化账号信息用
+$aliyun.site.num=1
+
+
+
+---------------正式环境---------------------
+
+#阿里云账号1账号信息
+$aliyun.site.1.bucket=
+$aliyun.site.1.ossEndpoint=
+$aliyun.site.1.accessKeyId=
+$aliyun.site.1.accessKeySecret=
+$aliyun.site.1.domain=
+
+#又拍云账号数,初始化账号信息用
+$upyun.site.num=1
+#阿里云账号数,初始化账号信息用
+$aliyun.site.num=1

+ 65 - 0
upgrade-202005/mysql脚本.sql

@@ -0,0 +1,65 @@
+-- 修改权限组表
+ALTER TABLE EC_B_PRIVILEGE_GROUP DROP INDEX UK_fsdvgdf02vmgi4nuq3k7hxbgy;
+ALTER TABLE EC_B_PRIVILEGE_GROUP DROP INDEX UK_gtfc2sf4qnyb50v8wavhutcdy;
+ALTER TABLE EC_B_PRIVILEGE_GROUP ADD type VARCHAR(50) NOT NULL;
+ALTER TABLE EC_B_PRIVILEGE_GROUP ADD root_org_id BIGINT NULL;
+ALTER TABLE EC_B_PRIVILEGE_GROUP ADD CONSTRAINT IDX_B_PRI_G_002001 UNIQUE (`code`);  
+ALTER TABLE EC_B_PRIVILEGE_GROUP ADD CONSTRAINT IDX_B_PRI_G_002002 UNIQUE (root_org_id,type); 
+
+-- 权限组表更新数据
+UPDATE ec_b_privilege_group set type='ADMIN_MENU' where id in (0,1,2,3,4,5,7) and 1=2;
+UPDATE ec_b_privilege_group set type='FUNCTION' where id in (8);
+UPDATE ec_b_privilege_group set type='DATA_ACCESS' where id in (9);
+
+-- 权限组表新增数据
+INSERT INTO `ec_b_privilege_group`(`id`, `creation_time`, `update_time`, `code`, `name`, `type`, `root_org_id`, `ext1`, `ext2`, `ext3`, `ext4`, `ext5`) VALUES (10, '2020-03-26 15:02:16', '2020-03-26 15:02:16', 'STUDENT_CLIENT_MENU', '考生端菜单', 'STUDENT_CLIENT_MENU', NULL, 'menu', NULL, NULL, NULL, NULL);
+
+-- 权限表新增数据
+INSERT INTO `ec_b_privilege`(`id`, `creation_time`, `update_time`, `code`, `description`, `ext1`, `ext2`, `ext3`, `ext4`, `ext5`, `group_id`, `name`, `parent_id`, `weight`) VALUES (6542, '2020-03-26 15:24:04', '2020-03-26 15:43:33', 'stu_online_exam', '在线考试', 'ONLINE', NULL, NULL, NULL, NULL, 10, '在线考试', NULL, 6);
+INSERT INTO `ec_b_privilege`(`id`, `creation_time`, `update_time`, `code`, `description`, `ext1`, `ext2`, `ext3`, `ext4`, `ext5`, `group_id`, `name`, `parent_id`, `weight`) VALUES (6543, '2020-03-26 15:25:05', '2020-03-26 15:29:24', 'stu_online_homework', '在线作业', NULL, NULL, NULL, NULL, NULL, 10, '在线作业', NULL, 5);
+INSERT INTO `ec_b_privilege`(`id`, `creation_time`, `update_time`, `code`, `description`, `ext1`, `ext2`, `ext3`, `ext4`, `ext5`, `group_id`, `name`, `parent_id`, `weight`) VALUES (6544, '2020-03-26 15:26:10', '2020-03-26 15:29:29', 'stu_online_practice', '在线练习', NULL, NULL, NULL, NULL, NULL, 10, '在线练习', NULL, 4);
+INSERT INTO `ec_b_privilege`(`id`, `creation_time`, `update_time`, `code`, `description`, `ext1`, `ext2`, `ext3`, `ext4`, `ext5`, `group_id`, `name`, `parent_id`, `weight`) VALUES (6545, '2020-03-26 15:26:39', '2020-03-26 15:29:53', 'stu_offline_exam', '离线考试', NULL, NULL, NULL, NULL, NULL, 10, '离线考试', NULL, 3);
+INSERT INTO `ec_b_privilege`(`id`, `creation_time`, `update_time`, `code`, `description`, `ext1`, `ext2`, `ext3`, `ext4`, `ext5`, `group_id`, `name`, `parent_id`, `weight`) VALUES (6546, '2020-03-26 15:27:05', '2020-03-26 15:30:00', 'stu_notice', '公告通知', NULL, NULL, NULL, NULL, NULL, 10, '公告通知', NULL, 2);
+INSERT INTO `ec_b_privilege`(`id`, `creation_time`, `update_time`, `code`, `description`, `ext1`, `ext2`, `ext3`, `ext4`, `ext5`, `group_id`, `name`, `parent_id`, `weight`) VALUES (6547, '2020-03-26 15:28:55', '2020-03-26 15:30:05', 'stu_modify_pwd', '修改密码', NULL, NULL, NULL, NULL, NULL, 10, '修改密码', NULL, 1);
+
+
+
+-- 添加违纪类型表
+CREATE TABLE `ec_oe_illegally_type`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  `data_category` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  `enable` bit(1) NOT NULL,
+  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `sort_no` int(11) NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `IDX_E_O_I_T_001`(`root_org_id`, `code`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
+
+-- 初始化违纪类型表
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (1, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'POWER_FAILURE', 'SYSTEM', b'1', '断电', -1, 7);
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (2, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'MACHINE_STOPPAGE', 'SYSTEM', b'1', '机器故障', -1, 9);
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (5, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'OTHER', 'SYSTEM', b'1', '其他', -1, 10);
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (6, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'CHEAT', 'SYSTEM', b'1', '作弊', -1, 1);
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (7, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'NOT_ONESELF', 'SYSTEM', b'1', '他人替考', -1, 2);
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (8, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'ACTION_FAILURE', 'SYSTEM', b'1', '指定动作失败', -1, 4);
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (9, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'WITHOUT_ACTION', 'SYSTEM', b'1', '未进行人脸指定动作检测', -1, 8);
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (10, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'BATCH_PASS', 'SYSTEM', b'1', '批量审核通过', -1, 6);
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (11, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'BATCH_NOTPASS', 'SYSTEM', b'1', '批量审核不通过', -1, 5);
+INSERT INTO `ec_oe_illegally_type`(`id`, `creation_time`, `update_time`, `code`, `data_category`, `enable`, `name`, `root_org_id`, `sort_no`) VALUES (12, '2020-03-17 11:48:49', '2020-03-17 11:48:49', 'NOT_ONESELF_OF_PHOTO', 'SYSTEM', b'1', '相片替考', -1, 3);
+
+-- 考生表新加字段
+ALTER TABLE ec_oe_exam_student ADD reexamine_type VARCHAR(50) NULL;
+ALTER TABLE ec_oe_exam_student ADD reexamine_detail VARCHAR(200) NULL;
+
+-- 考试记录表新加字段
+ALTER TABLE ec_oe_exam_record_data ADD reexamine_type VARCHAR(50) NULL;
+ALTER TABLE ec_oe_exam_record_data ADD reexamine_detail VARCHAR(200) NULL;
+
+-- 审核表新加违纪类型字段
+ALTER TABLE ec_oe_exam_audit ADD illegally_type_id BIGINT NULL;
+
+

+ 7 - 0
upgrade-202005/参数配置.txt

@@ -0,0 +1,7 @@
+1.超管端参数配置
+1.1.名称为orgPropertyGroup.config4Edit3的参数值追加,IS_CUSTOM_MENU_LOGO,CUS_MENU_LOGO_FILE_URL
+1.2.名称为orgPropertyGroup.studentClientConfig的参数值追加,IS_CUSTOM_MENU_LOGO,CUS_MENU_LOGO_FILE_URL
+
+2.配置文件
+2.1.core-basic服务的security.properties添加[s][${$rmp.ctr.basic}/rolePrivilege][getStudentClientMenu][GET]=true
+

+ 23 - 0
upgrade-202006/basic.sql

@@ -0,0 +1,23 @@
+CREATE TABLE ec_b_login_rule
+(
+    id            BIGINT(20) NOT NULL AUTO_INCREMENT,
+    creation_time DATETIME   NOT NULL,
+    update_time   DATETIME   NOT NULL,
+    root_org_id   BIGINT(20) NOT NULL,
+    white         BIT(1)     NOT NULL,
+    PRIMARY KEY (id),
+    KEY IDX_B_LR_010001 (root_org_id)
+) ENGINE = INNODB
+  DEFAULT CHARSET = utf8;
+
+INSERT INTO ec_b_login_rule (root_org_id, white, creation_time, update_time)
+VALUES (17196, b'1', now(), now());
+INSERT INTO ec_b_login_rule (root_org_id, white, creation_time, update_time)
+VALUES (17682, b'1', now(), now());
+INSERT INTO ec_b_login_rule (root_org_id, white, creation_time, update_time)
+VALUES (17426, b'1', now(), now());
+INSERT INTO ec_b_login_rule (root_org_id, white, creation_time, update_time)
+VALUES (17351, b'1', now(), now());
+INSERT INTO ec_b_login_rule (root_org_id, white, creation_time, update_time)
+VALUES (16923, b'1', now(), now());
+

+ 9 - 0
upgrade-202007/Nginx变更.txt

@@ -0,0 +1,9 @@
+
+-------------------- 模块: basic Start --------------------
+
+-- 采用新域名规则
+
+-------------------- 模块: basic End --------------------
+
+
+

+ 78 - 0
upgrade-202007/about.txt

@@ -0,0 +1,78 @@
+升级准备:{
+
+	代码合并、封版、打上线Tag等 (Gogs服务器PUSH问题,暂采用发布分支:release_v4.0.1)
+
+	配置文件	变更梳理确认 (已确认)
+
+	数据库脚本	变更梳理确认  (已确认)
+
+	数据割接程序	确认 (已确认)
+
+	Redis 缓存	变更梳理确认  (已确认)
+
+	系统菜单	变更梳理确认 (已确认)
+
+	系统设置	变更梳理确认 (已确认)
+
+	极验验证码账号切换、调试 (已确认)
+
+
+	线上环境准备:
+		RocketMq 环境搭建、调试 (已搭建)
+
+		数据库、前、后端工程,Nginx配置 等备份  (已备份)
+
+		Nginx	变更调整配置  (已调整)
+
+		Jenkins	变更调整配置  (已调整)
+
+		服务器资源 变更调整  (已调整)
+
+		新版本所有工程 代码打包分发准备  (已调整)
+
+		新域名规则 搭建、调试 (新、旧域名规则验证)
+
+		移动端、小程序 调整,调试
+
+
+	停服升级:
+		
+		关闭登录入口 (已执行)
+
+
+
+		停服(停服条件:OE-Task 处理完所有的同步数据后,且保证redis中oe_*开头的数据已清理完毕,则可以停服,
+否则可能会出现redis的数据结构兼容问题和脏数据问题)
+参考如下sql语句的执行结果:
+	-- 查询全部未同步的考试记录
+	SELECT
+		t1.root_org_id,t1.exam_id,t3.`name` as exam_name,t2.student_name, t2.identity_number,t1.creation_time,t1.start_time,t1.exam_student_id,t1.student_id,t1.exam_type
+	FROM
+		ec_oes_exam_record_data t1
+		inner join ec_oe_exam_student t2 on t1.exam_student_id=t2.exam_student_id
+		inner join ec_e_exam t3 on t1.exam_id=t3.id
+	WHERE 
+	t1.id NOT IN ( 
+	SELECT cache_id FROM ec_oe_exam_record_data_sync 
+	) and t1.exam_type in('ONLINE','OFFLINE');
+
+
+
+		脚本升级执行 (已执行)
+
+		Redis 缓存处理 (已执行)
+
+		程序割接执行 (已执行)
+
+		Nginx 配置重启 (已执行)
+
+		工程重启 (已执行)
+
+		菜单、系统设置 等改动手动执行 (已执行)
+
+		 app.faceid.notify_url 在管理后台中手动改参数值 (已执行)
+
+		开放入口、复测 (已执行)
+
+		End
+}

+ 5 - 0
upgrade-202007/其它.txt

@@ -0,0 +1,5 @@
+
+
+RocketMq 环境搭建安装
+安装位置:/home/admin/tools/rocketmq/rocketmq-v4.7.1
+

+ 417 - 0
upgrade-202007/数据库变更.txt

@@ -0,0 +1,417 @@
+
+-------------------- 模块: basic Start --------------------
+
+清理Redis缓存KEY:B_LOGIN_RULE
+
+DROP TABLE IF EXISTS ec_b_login_rule;
+
+CREATE TABLE ec_b_login_rule (
+  id bigint(20) NOT NULL AUTO_INCREMENT,
+  root_org_id bigint(20) NOT NULL,
+  type varchar(50) NOT NULL,
+	allow bit(1) NOT NULL,
+	creation_time datetime NOT NULL,
+  update_time datetime NOT NULL,
+  PRIMARY KEY (id),
+  KEY IDX_B_LR_001 (root_org_id),
+  KEY IDX_B_LR_002 (type)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+
+INSERT INTO ec_b_login_rule(root_org_id, type, allow, creation_time, update_time) VALUES (-1, 'STUDENT_LOGIN', b'0', now(), now());
+INSERT INTO ec_b_login_rule(root_org_id, type, allow, creation_time, update_time) VALUES (-1, 'STUDENT_CLIENT_LOGIN', b'1', now(), now());
+INSERT INTO ec_b_login_rule(root_org_id, type, allow, creation_time, update_time) VALUES (-1, 'GEETEST_LOGIN', b'1', now(), now());
+
+INSERT INTO ec_b_login_rule(root_org_id, type, allow, creation_time, update_time) VALUES (0, 'STUDENT_LOGIN', b'1', now(), now());
+INSERT INTO ec_b_login_rule(root_org_id, type, allow, creation_time, update_time) VALUES (17196, 'STUDENT_LOGIN', b'1', now(), now());
+INSERT INTO ec_b_login_rule(root_org_id, type, allow, creation_time, update_time) VALUES (17682, 'STUDENT_LOGIN', b'1', now(), now());
+INSERT INTO ec_b_login_rule(root_org_id, type, allow, creation_time, update_time) VALUES (17426, 'STUDENT_LOGIN', b'1', now(), now());
+INSERT INTO ec_b_login_rule(root_org_id, type, allow, creation_time, update_time) VALUES (17351, 'STUDENT_LOGIN', b'1', now(), now());
+INSERT INTO ec_b_login_rule(root_org_id, type, allow, creation_time, update_time) VALUES (16923, 'STUDENT_LOGIN', b'1', now(), now());
+
+-- 新加系统通知表
+CREATE TABLE `ec_b_sys_notice`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `content` varchar(400) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `end_time` datetime(0) NULL DEFAULT NULL,
+  `root_org_id` bigint(20) NULL DEFAULT NULL,
+  `start_time` datetime(0) NULL DEFAULT NULL,
+  `enable` bit(1) NULL DEFAULT NULL,
+  `title` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+#权限组新增报表模块
+INSERT INTO ec_b_privilege_group(creation_time,update_time,code,name,type,ext1) VALUES (now(), now(), 'REPORTS_MENUS', '报表菜单', 'ADMIN_MENU',  'menu');
+
+
+-------------------- 模块: basic End --------------------
+
+#题库试卷模板表增加创建人 创建时间 修改时间 字段
+
+ALTER TABLE `ec_q_export_template` ADD COLUMN `creation_by`  bigint(20) NULL DEFAULT NULL, ADD COLUMN `update_by`  bigint(20) NULL DEFAULT NULL, ADD COLUMN `update_time`  datetime NULL DEFAULT NULL;
+
+#报表服务增加学生日志表
+
+CREATE TABLE `ec_r_operate` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `exam_student_id` bigint(20) DEFAULT NULL,
+  `msg_id` varchar(255) NOT NULL,
+  `operate` varchar(255) NOT NULL,
+  `operate_ip` varchar(255) DEFAULT NULL,
+  `operate_time` datetime NOT NULL,
+  `operate_user_id` bigint(20) DEFAULT NULL,
+  `operate_user_type` varchar(255) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `student_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_OPERATE_03` (`msg_id`),
+  KEY `IDX_R_OPERATE_01` (`root_org_id`,`student_id`),
+  KEY `IDX_R_OPERATE_02` (`root_org_id`,`student_id`,`operate_time`)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+
+#task服务新增在线人数统计任务、学生日志清理任务
+
+INSERT INTO ec_t_schedule_job(creation_time,update_time,cron_expression,description,enable,ext1,job_group,job_name,spring_bean,stateful)
+ VALUES (now(), now(), '0 0 2 * * ?', '学生总数', 1, 'REPORTS', 'studentTotalCountTask', 'studentTotalCountTask', 'studentTotalCountTask', 1);
+INSERT INTO ec_t_schedule_job(creation_time,update_time,cron_expression,description,enable,ext1,job_group,job_name,spring_bean,stateful)
+ VALUES (now(),now(), '20 * * * * ?', '在线考生', 1, 'REPORTS', 'examStudentOnlineCountTask', 'examStudentOnlineCountTask', 'examStudentOnlineCountTask', 1);
+INSERT INTO ec_t_schedule_job(creation_time,update_time,cron_expression,description,enable,ext1,job_group,job_name,spring_bean,stateful)
+ VALUES (now(), now(), '30 * * * * ?', '累计在线学生', 1, 'REPORTS', 'studentCumulativeCountTask', 'studentCumulativeCountTask', 'studentCumulativeCountTask', 1);
+INSERT INTO ec_t_schedule_job(creation_time,update_time,cron_expression,description,enable,ext1,job_group,job_name,spring_bean,stateful)
+ VALUES (now(), now(), '10 * * * * ?', '在线学生', 1, 'REPORTS', 'studentOnlineCountTask', 'studentOnlineCountTask', 'studentOnlineCountTask', 1);
+INSERT INTO ec_t_schedule_job(creation_time,update_time,cron_expression,description,enable,ext1,job_group,job_name,spring_bean,stateful)
+ VALUES (now(), now(), '10 * * * * ?', '在线用户', 1, 'REPORTS', 'userOnlineCountTask', 'userOnlineCountTask', 'userOnlineCountTask', 1);
+INSERT INTO ec_t_schedule_job(creation_time,update_time,cron_expression,description,enable,ext1,job_group,job_name,spring_bean,stateful)
+ VALUES (now(), now(), '0 0 3 * * ?', '学生操作日志清理', 1, 'REPORTS', 'studentOperateLogTask', 'studentOperateLogTask', 'studentOperateLogTask', 1);
+
+
+-------------------- 模块: examwork start --------------------
+-- 新增场次表
+CREATE TABLE `ec_e_exam_stage`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `enable` bit(1) NOT NULL,
+  `end_time` datetime(0) NULL DEFAULT NULL,
+  `exam_id` bigint(20) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `special_setting` bit(1) NOT NULL,
+  `stage_order` int(11) NOT NULL,
+  `start_exam_status` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  `start_time` datetime(0) NULL DEFAULT NULL,
+  `submit_duration` int(11) NULL DEFAULT NULL,
+  `submit_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `IDX_E_ES_001001`(`exam_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- 新增场次设置表
+CREATE TABLE `ec_e_exam_stage_setting`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `exam_id` bigint(20) NOT NULL,
+  `submit_duration` int(11) NULL DEFAULT NULL,
+  `submit_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `IDX_E_ESS_001001`(`exam_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- 考生表新加场次id和场次号
+ALTER TABLE ec_e_exam_student ADD exam_stage_id BIGINT(20) NULL, ADD exam_stage_order int(11) NULL;
+
+
+-------------------- 模块: examwork End --------------------
+
+
+-------------------- 模块: oe start--------------------
+
+-- 新增断点记录临时表
+CREATE TABLE `ec_oes_exam_continued_record`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `continued_time` datetime(0) NULL DEFAULT NULL,
+  `exam_record_data_id` bigint(20) NULL DEFAULT NULL,
+  `start_time` datetime(0) NULL DEFAULT NULL,
+    `used_exam_time` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `IDX_E_O_E_C_R_001`(`exam_record_data_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- 新增断点记录归档表
+CREATE TABLE `ec_oe_exam_continued_record`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `continued_time` datetime(0) NULL DEFAULT NULL,
+  `exam_record_data_id` bigint(20) NULL DEFAULT NULL,
+  `start_time` datetime(0) NULL DEFAULT NULL,
+    `used_exam_time` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `IDX_E_O_E_C_R_001`(`exam_record_data_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- 新增考试过程临时表
+CREATE TABLE `ec_oes_exam_process_record`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `exam_record_data_id` bigint(20) NULL DEFAULT NULL,
+  `process_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `record_time` datetime(0) NULL DEFAULT NULL,
+  `source_ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `IDX_E_O_E_P_R_001`(`exam_record_data_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- 新增考试过程归档表
+CREATE TABLE `ec_oe_exam_process_record`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `exam_record_data_id` bigint(20) NULL DEFAULT NULL,
+  `process_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `record_time` datetime(0) NULL DEFAULT NULL,
+  `source_ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `IDX_E_O_E_P_R_001`(`exam_record_data_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- 新增考试记录作答文件表
+CREATE TABLE `ec_oe_exam_record_file_answer`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime(0) NOT NULL,
+  `update_time` datetime(0) NOT NULL,
+  `exam_record_data_id` bigint(20) NULL DEFAULT NULL,
+  `file_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `file_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `file_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `original_file_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `properties` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `suffix` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `IDX_E_O_E_R_F_A_001`(`exam_record_data_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+
+-- -- 考生表字段调整
+ALTER TABLE ec_oe_exam_student ADD exam_stage_id BIGINT(20) NULL, ADD exam_stage_order int(11) NULL;
+
+-- 考试记录临时表字段新增
+ALTER TABLE ec_oes_exam_record_data ADD `exam_stage_id` bigint(20) NULL DEFAULT NULL, ADD `exam_stage_order` int(11) NULL DEFAULT NULL, ADD `enter_exam_time` datetime(0) NULL DEFAULT NULL, ADD `continued_time` datetime(0) NULL DEFAULT NULL, ADD `last_active_time` datetime(0) NULL DEFAULT NULL;
+
+-- 考试记录归档表字段新增
+ALTER TABLE ec_oe_exam_record_data ADD `exam_stage_id` bigint(20) NULL DEFAULT NULL, ADD `exam_stage_order` int(11) NULL DEFAULT NULL, ADD `reexamine_detail` varchar(200) NULL DEFAULT NULL, ADD `reexamine_type` varchar(20) NULL DEFAULT NULL, ADD `switch_screen_count` int(11) NULL DEFAULT NULL, ADD `enter_exam_time` datetime(0) NULL DEFAULT NULL, ADD `continued_time` datetime(0) NULL DEFAULT NULL, ADD `last_active_time` datetime(0) NULL DEFAULT NULL;
+
+
+
+- 补充
+
+
+-- 考生临时表新加场次id和场次号
+ALTER TABLE EC_T_EXAM_STUDENT_TMP ADD exam_stage_id BIGINT(20) NULL, ADD exam_stage_order int(11) NULL;
+
+
+CREATE TABLE `ec_oe_export_task` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `exam_id` bigint(20) DEFAULT NULL,
+  `file_path` varchar(255) DEFAULT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `status` varchar(50) NOT NULL,
+  `status_msg` varchar(500) DEFAULT NULL,
+  `type` varchar(50) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `IDX_OE_ET_001` (`root_org_id`),
+  KEY `IDX_OE_ET_002` (`exam_id`),
+  KEY `IDX_OE_ET_003` (`type`),
+  KEY `IDX_OE_ET_004` (`status`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `ec_r_exam_course_data_report` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `avg_difficulty_degree` double DEFAULT NULL,
+  `avg_score` double DEFAULT NULL,
+  `cdi` double DEFAULT NULL,
+  `course_code` varchar(255) NOT NULL,
+  `course_id` bigint(20) NOT NULL,
+  `course_name` varchar(255) NOT NULL,
+  `exam_code` varchar(255) NOT NULL,
+  `exam_id` bigint(20) NOT NULL,
+  `exam_name` varchar(255) NOT NULL,
+  `full_count` bigint(20) NOT NULL,
+  `max_score` double DEFAULT NULL,
+  `min_score` double DEFAULT NULL,
+  `participant_count` bigint(20) NOT NULL,
+  `partition_data` varchar(255) NOT NULL,
+  `pass_count` bigint(20) NOT NULL,
+  `project_id` bigint(20) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `sign_count` bigint(20) NOT NULL,
+  `std` double DEFAULT NULL,
+  `total_score` double DEFAULT NULL,
+  `zero_count` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_EXAM_COURSE_DATA_REPORT_01` (`project_id`,`root_org_id`,`exam_id`,`course_id`),
+  KEY `IDX_R_EXAM_COURSE_DATA_REPORT_02` (`project_id`),
+  KEY `IDX_R_EXAM_COURSE_DATA_REPORT_03` (`root_org_id`),
+  KEY `IDX_R_EXAM_COURSE_DATA_REPORT_04` (`exam_id`),
+  KEY `IDX_R_EXAM_COURSE_DATA_REPORT_05` (`course_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `ec_r_user_count` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `online_count` int(11) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_USER_COUNT_01` (`root_org_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `ec_r_student_total_count` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `total_count` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_STUDENT_TOTAL_COUNT_01` (`root_org_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `ec_r_student_cumulative_count` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `report_day` varchar(255) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `total_count` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_STUDENT_CUMULATIVE_COUNT_01` (`root_org_id`,`report_day`),
+  KEY `IDX_R_STUDENT_CUMULATIVE_COUNT_02` (`report_day`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `ec_r_student_count` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `online_count` int(11) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_STUDENT_COUNT_01` (`root_org_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `ec_r_project` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `analyse_type` varchar(255) NOT NULL,
+  `course_count` int(11) DEFAULT NULL,
+  `data_origin` varchar(255) NOT NULL,
+  `enable` bit(1) NOT NULL,
+  `exam_ids` varchar(255) DEFAULT NULL,
+  `name` varchar(255) NOT NULL,
+  `org_count` int(11) DEFAULT NULL,
+  `partition_count` int(11) DEFAULT NULL,
+  `partition_details` varchar(255) DEFAULT NULL,
+  `pass_score` double DEFAULT NULL,
+  `remarks` varchar(255) DEFAULT NULL,
+  `report_status` varchar(255) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `sample_count` int(11) NOT NULL,
+  `total_score` double DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `IDX_R_PROJECT_01` (`root_org_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `ec_r_exam_student_count` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `exam_id` bigint(20) NOT NULL,
+  `online_count` int(11) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_EXAM_STUDENT_COUNT_01` (`root_org_id`,`exam_id`),
+  KEY `IDX_R_EXAM_STUDENT_COUNT_02` (`exam_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `ec_r_exam_org_report` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `exam_code` varchar(255) NOT NULL,
+  `exam_id` bigint(20) NOT NULL,
+  `exam_name` varchar(255) NOT NULL,
+  `org_code` varchar(255) NOT NULL,
+  `org_id` bigint(20) NOT NULL,
+  `org_name` varchar(255) NOT NULL,
+  `participant_count` bigint(20) NOT NULL,
+  `partition_data` varchar(255) NOT NULL,
+  `pass_count` bigint(20) NOT NULL,
+  `project_id` bigint(20) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `sign_count` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_EXAM_ORG_REPORT_01` (`project_id`,`root_org_id`,`exam_id`,`org_id`),
+  KEY `IDX_R_EXAM_ORG_REPORT_02` (`project_id`),
+  KEY `IDX_R_EXAM_ORG_REPORT_03` (`root_org_id`),
+  KEY `IDX_R_EXAM_ORG_REPORT_04` (`exam_id`),
+  KEY `IDX_R_EXAM_ORG_REPORT_05` (`org_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `ec_r_exam_data` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `complete_count` int(11) DEFAULT NULL,
+  `end_time` datetime NOT NULL,
+  `exam_id` bigint(20) NOT NULL,
+  `exam_name` varchar(255) NOT NULL,
+  `exam_type` varchar(255) NOT NULL,
+  `plan_count` int(11) DEFAULT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  `start_time` datetime NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_EXAM_DATA_01` (`root_org_id`,`exam_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+
+
+-- 离线数据上传的文件地址数据切割脚本(将ec_oe_exam_record_4_marking表中的offline_file_url和offline_file_name字段)切到新表ec_oe_exam_record_file_answer
+使用通用的数据处理工具来执行,目录:‪\examcloud-oe-tool\src\main\java\cn\com\qmth\dp\examcloud\oe\modules\cut_exam_offline_data\CutExamOfflineDataService.java
+
+
+
+
+
+################################## 警告 ##################################
+################################## 警告 ##################################
+################################## 警告 ##################################
+删除考试记录待阅卷表中的离线 文件字段 (!!important!!!!!谨慎操作,一定要待 《离线文件数据切割》切割完成后再执行下面语句)
+
+-- ALTER TABLE ec_oe_exam_record_4_marking DROP column `offline_file_url`, DROP column `offline_file_name`;
+
+
+-------------------- 模块: oe end--------------------
+
+
+
+
+

+ 61 - 0
upgrade-202007/离线文件数据切割/config/application.properties

@@ -0,0 +1,61 @@
+#mvc
+server.port=2008
+spring.application.name=EXAMCLOUD-OE-TOOL
+spring.main.allow-bean-definition-overriding=true
+spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+spring.jackson.time-zone=GMT+8
+
+#datasource
+dsurl.host=qmth-db4.mysql.rds.aliyuncs.com
+dsurl.port=3306
+dsurl.database=exam_cloud_test
+spring.datasource.username=exam_cloud_test
+spring.datasource.password=Examcloud123
+spring.datasource.url=jdbc:mysql://${dsurl.host}:${dsurl.port}/${dsurl.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2b8&rewriteBatchedStatements=true
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.jpa.hibernate.ddl-auto=validate
+
+#druid
+spring.datasource.druid.initial-size=5
+spring.datasource.druid.max-active=15
+spring.datasource.druid.min-idle=5
+spring.datasource.druid.max-wait=2000
+spring.datasource.druid.validation-query=SELECT 1
+spring.datasource.druid.validation-query-timeout=2000
+spring.datasource.druid.test-on-borrow=false
+spring.datasource.druid.test-on-return=false
+spring.datasource.druid.test-while-idle=true
+
+#mongodb
+mguri.hostAndPortGroup=dds-wz972dde5d2d78e433270.mongodb.rds.aliyuncs.com:3717
+mguri.username=exam-cloud-dev
+mguri.password=Examcloud123
+mguri.database=admin
+spring.data.mongodb.uri=mongodb://${mguri.username}:${mguri.password}@${mguri.hostAndPortGroup}/${mguri.database}
+spring.data.mongodb.grid-fs-database=examcloud-core-oe
+spring.data.mongodb.database=examcloud-core-oe
+
+#redis
+spring.redis.host=qmth-redis3.redis.rds.aliyuncs.com
+spring.redis.port=6379
+spring.redis.database=0
+spring.redis.password=jkhm45-UO8rFc-q2Eb90
+
+#exchange
+qmth.rootOrgId=0
+qmth.secretKey=123456
+qmth.appId=11
+qmth.server.host=192.168.1.91
+qmth.server.port=8007
+
+#fixParam's path
+fixAnswer.data.path=/home/admin/project/temp1.txt
+
+#获取断点续考的考试id
+getContiuedCount.examId=19
+#通用文件导出目录
+file.export.path=D:/Temp
+
+
+

+ 1 - 0
upgrade-202007/离线文件数据切割/config/classpath.location

@@ -0,0 +1 @@
+classpath 定位文件

BIN
upgrade-202007/离线文件数据切割/offlineDataCut/examcloud-oe-tool.zip


+ 2 - 0
upgrade-202007/离线文件数据切割/使用说明.txt

@@ -0,0 +1,2 @@
+1.修改/config/application.properties文件中的配置为正式环境的配置
+2.进入offlineDataCut目录,执行java -jar .\examcloud-oe-tool-v3.0-RELEASE.jar 即可

+ 13 - 0
upgrade-202007/菜单变更.txt

@@ -0,0 +1,13 @@
+
+
+
+新增菜单:
+
+基础信息菜单 --> 系统管理 --> 登录规则配置(sys_login_rule_list 属性1:menu 属性5:/basic/sysLoginRuleList)
+网考管理菜单 --> 任务管理(task_manager 属性1:menu 权重:7) --> 导出任务列表(export_task_list 属性1:menu 属性5:/oe/exportTaskList)
+基础信息菜单 --> 系统管理 --> 系统通知(sys_notice 属性1:menu 权重:0 属性5:/basic/sys_notice)
+
+门户菜单-->名称:报表,编码:REPORTS,属性4:reports,权重:30
+
+报表菜单 --> 名称:在线人数,编码:online_num,属性1:menu,权重:0 --> 名称:在线学生,编码:reports_exam_student_online,属性1:menu,属性5:/reports/exam-student-online,权重:0
+

+ 30 - 0
upgrade-202007/配置变更.txt

@@ -0,0 +1,30 @@
+
+-------------------- 模块: basic Start --------------------
+
+# geetest config
+examcloud.starters.geetest.apiUrl=http://api.geetest.com
+examcloud.starters.geetest.id=xxx
+examcloud.starters.geetest.key=xxx
+
+-------------------- 模块: basic End --------------------
+
+
+########## application.properties 配置文件增加
+
+# mq
+$report.enable=true
+$report.mq-type=rocketmq
+$rocketmq-accesskey=
+$rocketmq-secretkey=
+$rocketmq-namesrv-addr=
+
+########## application.properties 配置文件增加
+
+-------------------- 管理端参数配置: start --------------------
+菜单 --> 系统管理  --> 参数配置  --> app.faceid.notify_url
+参数值中的域名需要改成当前环境的可被外网访问的新域名 {
+    https://ecs.qmth.com.cn:8878/api/ecs_oe_student/examFaceLivenessVerify/faceLivenessVerifyCallback
+    改成:
+    https://www.exam-cloud.cn/api/ecs_oe_student/examFaceLivenessVerify/faceLivenessVerifyCallback (待验证)
+}
+-------------------- 管理端参数配置: end --------------------

+ 4 - 0
upgrade-202011/about.txt

@@ -0,0 +1,4 @@
+
+
+todo
+

+ 41 - 0
upgrade-202011/数据库变更.txt

@@ -0,0 +1,41 @@
+
+-------------------- 模块: basic Start --------------------
+#用户日志表
+
+CREATE TABLE `ec_b_admin_operate` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `creation_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  `msg_id` varchar(255) NOT NULL,
+  `operate` varchar(255) NOT NULL,
+  `operate_ip` varchar(255) NOT NULL,
+  `operate_time` datetime NOT NULL,
+  `operate_user_id` bigint(20) NOT NULL,
+  `root_org_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_R_ADMIN_OPERATE_03` (`msg_id`),
+  KEY `IDX_R_ADMIN_OPERATE_01` (`root_org_id`,`operate_user_id`),
+  KEY `IDX_R_ADMIN_OPERATE_02` (`root_org_id`,`operate_user_id`,`operate_time`)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+
+#首次登录改密码
+alter table ec_b_user add password_weak bit(1) NOT NULL DEFAULT 1;
+update ec_b_user set password_weak=0;
+
+alter table ec_b_student add password_weak bit(1) NOT NULL DEFAULT 1;
+update ec_b_student set password_weak=0;
+
+#学生密码加密(可重复执行)
+update ec_b_student set password=UPPER(SHA2(CONCAT(identity_number,password),256)) where LENGTH(password)<64;
+#后台用户密码加密(可重复执行)
+update ec_b_user set password=UPPER(SHA2(CONCAT(login_name,password),256)) where id not in (select f.user_id from ec_b_user_role_relation f where f.role_id=1) and LENGTH(password)<64;
+
+
+
+-------------------- 模块: basic End --------------------
+
+
+
+
+
+

+ 8 - 0
upgrade-202011/菜单变更.txt

@@ -0,0 +1,8 @@
+
+
+
+	新增菜单:
+
+		基础信息菜单 --> 用户管理 --> 操作日志(index_admin_operate 属性1:menu 权重:0 属性5:/basic/admin_operate)
+
+

+ 9 - 0
upgrade-202011/配置变更.txt

@@ -0,0 +1,9 @@
+
+-------------------- 模块: app-api Start --------------------
+
+# application-API.properties 增加
+
+question.api.domain=xxx
+oe.admin.api.domain=xxx
+
+-------------------- 模块: app-api End --------------------