diff --git a/app/models/user.rb b/app/models/user.rb
index e74290c84..6fac73416 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -726,8 +726,8 @@ class User < ApplicationRecord
   end
 
   def validate_sensitive_string
-    raise("真实姓名包含敏感词汇,请重新输入") if lastname && !HarmoniousDictionary.clean?(lastname)
-    raise("昵称包含敏感词汇,请重新输入") if nickname && !HarmoniousDictionary.clean?(nickname)
+    raise("真实姓名包含敏感词汇,请重新输入#{lastname}") if lastname && !HarmoniousDictionary.clean?(lastname)
+    raise("昵称包含敏感词汇,请重新输入#{nickname}") if nickname && !HarmoniousDictionary.clean?(nickname)
   end
 
   def set_laboratory
diff --git a/app/services/oauth/create_or_find_cas_user_service.rb b/app/services/oauth/create_or_find_cas_user_service.rb
index 761f9da58..550157ebd 100644
--- a/app/services/oauth/create_or_find_cas_user_service.rb
+++ b/app/services/oauth/create_or_find_cas_user_service.rb
@@ -14,7 +14,7 @@ class Oauth::CreateORFindCasUserService < ApplicationService
 
     return [open_user.user, false] if open_user.persisted?
 
-    @user = User.new(login: User.generate_login('C'), type: 'User', status: User::STATUS_ACTIVE, lastname: @params['comsys_name'])
+    @user = User.new(login: "tfxy#{@params['user']}", type: 'User', status: User::STATUS_ACTIVE, lastname: @params['comsys_name'])
 
     ActiveRecord::Base.transaction do
       @user.save!
diff --git a/config/harmonious_dictionary/chinese_dictionary.txt b/config/harmonious_dictionary/chinese_dictionary.txt
index c65450d70..65f4397ce 100644
--- a/config/harmonious_dictionary/chinese_dictionary.txt
+++ b/config/harmonious_dictionary/chinese_dictionary.txt
@@ -357,7 +357,6 @@ H漫画
 学生暴动
 镇压学生
 广安第二人民医院
-胡新宇
 趙紫陽
 自由亚州
 践踏中国女性
@@ -682,7 +681,6 @@ A片
 被迫
 被逼
 强暴
-口技
 破处
 精液
 幼交
@@ -996,7 +994,6 @@ A片
 李少民
 李淑娴
 李旺阳
-李文斌
 李月月鸟
 李志绥
 连胜德
@@ -1157,7 +1154,6 @@ A片
 信用危机
 邢铮
 熊炎
-熊焱
 徐邦秦
 徐才厚
 徐匡迪
@@ -1194,7 +1190,6 @@ A片
 张伯笠
 张宏堡
 张万年
-张伟国
 张昭富
 张志清
 赵海青
diff --git a/config/harmonious_dictionary/harmonious.hash b/config/harmonious_dictionary/harmonious.hash
index 7dfcdc80b..67e985d4c 100644
Binary files a/config/harmonious_dictionary/harmonious.hash and b/config/harmonious_dictionary/harmonious.hash differ
diff --git a/lib/tasks/tfxy.rake b/lib/tasks/tfxy.rake
new file mode 100644
index 000000000..17698e167
--- /dev/null
+++ b/lib/tasks/tfxy.rake
@@ -0,0 +1,209 @@
+desc "同步天府学院数据, 执行顺序依次 import_teaches、 import_courses、 import_students、import_course_members"
+
+namespace :tfxy do
+
+  xlsx =Roo::Spreadsheet.open(Rails.root.join("tfxy.xlsx").to_s)
+
+  task import_teaches: :environment do
+    desc "同步天府学院老师数据"
+    xlsx =Roo::Spreadsheet.open(Rails.root.join("tfxy.xlsx").to_s)
+
+    school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
+      d.province = '四川省'
+      d.city = '成都'
+    end
+
+    #导入教师用户
+    teach_data = xlsx.sheet(3)
+    teach_data_last_row = teach_data.last_row
+
+    2.upto(teach_data_last_row) do |r|
+
+      if !User.where("phone = '#{teach_data.cell(r, 5)}' OR mail = '#{teach_data.cell(r, 6)}' OR login = 'tfxy#{teach_data.cell(r, 1)}' " ).exists?
+        user = User.new(
+          phone: teach_data.cell(r, 5),
+          login: "tfxy#{teach_data.cell(r, 1)}",
+          type: 'User',
+          status: User::STATUS_ACTIVE,
+          lastname: teach_data.cell(r, 2),
+          nickname: teach_data.cell(r, 2),
+          password: "Edu#{teach_data.cell(r, 5)}",
+          mail: teach_data.cell(r, 6),
+          profile_completed: true,
+          professional_certification: 1,
+          certification: 1
+        )
+
+        if  user.save!
+          departemnt = school.departments.find_or_create_by!(name: teach_data.cell(r, 4))
+
+          user.create_user_extension!(
+            school_id: school.id,
+            location: school.province,
+            location_city: school.city,
+            gender: teach_data.cell(r, 3) == '女' ? 1 : 0,
+            identity: 0,
+            technical_title: '教师',
+            department_id: departemnt.id
+          )
+
+          open_user = OpenUsers::Cas.find_or_initialize_by(uid: student_data.cell(r, 1)) do |u|
+            u.extra = {phone: student_data.cell(r, 8)}
+            u.user_id = user.id
+          end
+
+          open_user.save
+       end
+      end
+    end
+
+
+  end
+
+  task import_courses: :environment do
+    desc "同步天府学院课堂数据"
+
+    school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
+      d.province = '四川省'
+      d.city = '成都'
+    end
+
+    course_data = xlsx.sheet(4)
+    course_data_last_row = course_data.last_row
+
+    2.upto(course_data_last_row) do |r|
+      course_group = CourseGroup.find_or_initialize_by(invite_code: "#{course_data.cell(r, 1)}#{course_data.cell(r, 3)}")
+
+      teach_user = User.find_by(login: "tfxy#{course_data.cell(r, 5)}")
+
+      if !course_group.persisted?
+        course = Course.find_or_initialize_by(school_id: school.id, name: course_data.cell(r, 2)) do |d|
+          d.is_public = 0
+          d.tea_id = teach_user.id
+          d.laboratory_id = Laboratory.first.id
+        end
+
+
+
+        if !course.persisted?
+          # 创建课堂
+          course_list = CourseList.find_or_initialize_by(name: course_data.cell(r, 2), user_id: teach_user.id) do |d|
+            d.is_admin = 0
+          end
+
+          course.course_list = course_list
+          course.save!
+
+
+          course.generate_invite_code
+          CourseInfo.create!(user_id: teach_user.id, course_id: course.id)
+          course.create_course_modules(["shixun_homework", "common_homework", "group_homework", "exercise", "attachment", "course_group", "video"])
+        end
+
+        course_group.position = course.course_groups_count + 1
+        course_group.name = "#{course_data.cell(r, 2)}#{course_data.cell(r, 3)}"
+        course_group.course = course
+
+        course_group.save!
+
+        course_member = CourseMember.find_or_initialize_by(course_id: course.id, user_id: teach_user.id) do |d|
+          d.role = 2
+          d.course_group_id = course_group.id
+        end
+        course_member.save! if !course_member.persisted?
+
+        TeacherCourseGroup.create!(course_id: course.id, course_member_id: course_member.id, user_id: teach_user.id, course_group_id: course_group.id)
+      end
+    end
+  end
+
+
+  task import_students: :environment do
+    desc "同步天府学院学生数据"
+    student_data = xlsx.sheet(5)
+    student_data_last_row = student_data.last_row
+
+    school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
+      d.province = '四川省'
+      d.city = '成都'
+    end
+
+    2.upto(student_data_last_row) do |r|
+      # 邮箱存在
+      if student_data.cell(r, 9).present?
+        old_user = User.where("phone = '#{student_data.cell(r, 8)}' OR mail = '#{student_data.cell(r, 9)}' OR login = 'tfxy#{student_data.cell(r, 1)}' " ).first
+      else
+        old_user = User.where("phone = '#{student_data.cell(r, 8)}' OR login = 'tfxy#{student_data.cell(r, 1)}' " ).first
+      end
+
+      if !old_user.present?
+        user = User.new(
+          phone: student_data.cell(r, 8),
+          login: "tfxy#{student_data.cell(r, 1)}",
+          type: 'User',
+          status: User::STATUS_ACTIVE,
+          lastname: student_data.cell(r, 2),
+          nickname: student_data.cell(r, 2),
+          password: "Edu#{student_data.cell(r, 1)}",
+          mail: student_data.cell(r, 9),
+          profile_completed: true,
+          professional_certification: 1,
+          certification: 1
+        )
+
+        if user.save!
+          departemnt = school.departments.find_or_create_by!(name: student_data.cell(r, 4))
+
+          user.create_user_extension!(
+            school_id: school.id,
+            location: school.province,
+            location_city: school.city,
+            gender: student_data.cell(r, 3) == '女' ? 1 : 0,
+            identity: 1,
+            department_id: departemnt.id
+          )
+
+          OpenUsers::Cas.find_or_create_by(uid: student_data.cell(r, 1)) do |u|
+            u.extra = {phone: student_data.cell(r, 8)}
+            u.user_id = user.id
+          end
+
+        end
+
+      else
+        # 系统已有用户,关联sso认证用户
+        old_user.update(login: "tfxy#{student_data.cell(r, 1)}")
+
+        OpenUsers::Cas.find_or_create_by(uid: student_data.cell(r, 1)) do |u|
+          u.extra = {phone: student_data.cell(r, 8)}
+          u.user_id = old_user.id
+        end
+
+      end
+    end
+
+  end
+
+  task import_course_members: :environment do
+    desc "天府学院学生到课程分班"
+    course_member_data = xlsx.sheet(6)
+    course_member_data_last_row = course_member_data.last_row
+
+    school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
+      d.province = '四川省'
+      d.city = '成都'
+    end
+
+    2.upto(course_member_data_last_row) do |r|
+      course_group = CourseGroup.find_by(invite_code: "#{course_member_data.cell(r, 3)}#{course_member_data.cell(r, 5)}")
+      student = User.find_by(login: "tfxy#{course_member_data.cell(r, 1)}")
+
+      CourseMember.find_or_create_by!(course_id: course_group.course_id, user_id: student.id, course_group_id: course_group.id) do |d|
+        d.role = 4
+      end if student.present?
+   end
+  end
+
+
+end
+
diff --git a/tfxy.xlsx b/tfxy.xlsx
new file mode 100644
index 000000000..ff3b5dc02
Binary files /dev/null and b/tfxy.xlsx differ