diff --git a/DigitalSchoolApi/Controllers/HTSchoolController.cs b/DigitalSchoolApi/Controllers/HTSchoolController.cs new file mode 100644 index 0000000..752d89b --- /dev/null +++ b/DigitalSchoolApi/Controllers/HTSchoolController.cs @@ -0,0 +1,344 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Data.OracleClient; +using System.Data.SqlClient; +using System.Diagnostics; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using Dapper; +using DigitalSchoolApi.App_Data; +using DigitalSchoolApi.Models; +using Learun.Application.Organization; +using Learun.Util; +using Microsoft.AspNet.SignalR.Client; +using Newtonsoft.Json; +using Convert = System.Convert; +using DESEncrypt = Learun.Util.DESEncrypt; +using Md5Helper = Learun.Util.Md5Helper; + +namespace DigitalSchoolApi.Controllers +{ + /// + /// 塔里木学院定时需求 + /// + public class HTSchoolController + { + private readonly static string _admsConnection = ConfigurationManager.ConnectionStrings["CoreDBString"].ConnectionString; + private readonly static string _misConnection = ConfigurationManager.ConnectionStrings["ConnectionPfcMisDBString"].ConnectionString; + private static string _htMiddleConnection = ConfigurationManager.ConnectionStrings["htMiddleDBString"].ConnectionString; + + //private readonly static string _tlmMiddleConnection =ConfigurationManager.ConnectionStrings["TLMMiddleDBString"].ConnectionString; + + + + #region 中间库同步到数校 + + /// + /// 从中间库同步系部数据 + /// + public static void SyncDepartment() + { + try + { + IEnumerable entityList = null; + using (IDbConnection conn = new SqlConnection(_htMiddleConnection)) + { + entityList = conn.Query("SELECT * FROM nc_orgnization"); + } + using (IDbConnection conn = new SqlConnection(_admsConnection)) + { + try + { + var maxSort = -1; + try + { + maxSort = conn.QueryFirstOrDefault("select MAX(F_Order) FROM LR_BASE_DEPARTMENT"); + } + catch (Exception e) + { + maxSort = -1; + } + + //插入sql + foreach (var item in entityList) + { + DepartmentEntity model = null; + using (IDbConnection xbconn = new SqlConnection(_admsConnection)) + { + model = xbconn.QueryFirstOrDefault($"select * from LR_BASE_DEPARTMENT where DeptNo='{item.CODE}'"); + } + if (model == null) + { + maxSort++; + var id = item.ID.Length == 30 ? Guid.ParseExact(item.ID, "N") : Guid.NewGuid(); + //没有就新增 + var sql = + "INSERT INTO LR_BASE_DEPARTMENT (F_DepartmentId, F_CompanyId, F_ParentId, F_EnCode, F_FullName, F_Order,F_DeleteMark,F_EnabledMark) " + + $"VALUES ('{id}', '207fa1a9-160c-4943-a89b-8fa4db0547ce', '{item.FID}', '{item.CODE}', '{item.NAME}', {maxSort},0,1);"; + conn.Execute(sql); + } + else + { + //存在就修改 + var sql = $"UPDATE LR_BASE_DEPARTMENT SET F_FullName='{item.NAME}',F_ParentId='{item.FID}' where F_EnCode='{model.F_EnCode}';"; + conn.Execute(sql); + } + + } + //插入数据同步结果 + using (IDbConnection conncore = new SqlConnection(_admsConnection)) + { + conncore.Execute( + "insert into LR_Base_Log(F_LogId,F_CategoryId,F_SourceObjectId,F_SourceContentJson,F_OperateTime) values(newid(),999,'从中间库同步部门信息到数校完成','部门同步数量:" + + entityList.Count() + "条',getdate())"); + } + } + catch (Exception e) + { + using (IDbConnection conncore = new SqlConnection(_admsConnection)) + { + conncore.Execute( + "insert into LR_Base_Log(F_LogId,F_CategoryId,F_SourceObjectId,F_SourceContentJson,F_OperateTime) values(newid(),999,'从中间库同步部门信息到数校异常','" + + e.Message + "',getdate())"); + } + } + } + } + catch (Exception e) + { + using (IDbConnection conn = new SqlConnection(_admsConnection)) + { + conn.Execute( + "insert into LR_Base_Log(F_LogId,F_CategoryId,F_SourceObjectId,F_SourceContentJson,F_OperateTime) values(newid(),999,'从中间库同步部门信息到数校异常','错误信息:" + + e.Message + "',getdate())"); + } + } + } + + /// + /// 从中间库同步学生数据 + /// + public static void SyncStuInfoAcc() + { + try + { + + IEnumerable entityList = null; + using (IDbConnection conn = new SqlConnection(_htMiddleConnection)) + { + entityList = conn.Query($"SELECT * FROM nc_stuInfo"); + } + + try + { + //插入sql + foreach (var item in entityList) + { + var id = item.ID.Length == 30 ? Guid.ParseExact(item.ID, "N") : Guid.NewGuid(); + var MZ = ""; + var xb = item.GenderNo == "1" ? 1 : 0; + + UserEntity model = null; + StuInfoBasicEntity stu = null; + using (IDbConnection xbconn = new SqlConnection(_admsConnection)) + { + model = xbconn.QueryFirstOrDefault($"select * from LR_Base_User where F_Account='{item.USERNAME}'"); + + if (model == null) + { + + var key = Md5Helper.Encrypt(CreateNo(), 16).ToLower(); + var pwd = Md5Helper.Encrypt(DESEncrypt.Encrypt(Md5Helper.Encrypt("ht123456", 32).ToLower(), key).ToLower(), 32).ToLower(); + + + var userSql = + $"INSERT INTO LR_Base_User (F_UserId,F_EnCode,F_Account,F_Mobile,F_Password,F_Secretkey,F_RealName,F_Gender,F_CompanyId," + + $"F_DepartmentId,F_DeleteMark,F_EnabledMark,F_Description,F_CreateDate,F_CreateUserId,F_CreateUserName,F_IdentityCardNo) VALUES('{Guid.NewGuid():D}'," + + $"'{item.USERNAME}','{item.USERNAME}','{item.MOBILE}','{pwd}','{key}','{item.StuName}','{xb}','207fa1a9-160c-4943-a89b-8fa4db0547ce','{item.DeptNo}',0,1,'学生'," + + $"'{DateTime.Now:yyyy-MM-dd hh:mm:ss}','System','数据同步','{item.IdentityCardNo}');"; + + xbconn.Execute(userSql); + + + } + + } + + using (var conn=new SqlConnection(_misConnection)) + { + stu= conn.QueryFirstOrDefault($"select * from StuInfoBasic where StuNo='{item.USERNAME}'"); + + if (stu == null) + { + var sql= "INSERT INTO StuInfoBasic(StuId,StuNo,StuCode,NoticeNo,GraduateYear,ksh,DeptNo,MajorNo,Grade,ClassNo,StuName,SpellFull,GenderNo,Birthday,PartyFaceNo," + + "FamilyOriginNo,NationalityNo,ResidenceNo,HealthStatusNo,GraduateNo,OverseasChineseNo,GoodAt,IdentityCardNo,InSchoolAddress," + + "InSchoolTelephone,Remark,mobile,CheckMark,InSchoolStatus,F_SchoolId,EduSystem,StudyModality,XJZT,XSDQZT) " + + $"VALUES('{id}','{item.USERNAME}','{item.CODE}','','','', '{item.DeptNo}', '{item.MajorNo}'," + + $"'{item.Grade}','{item.ClassNo}','{item.StuName}', '','{xb}','','',''," + + $"'{item.NationalityNo}','','1','2','0','','{item.IdentityCardNo}','','',''," + + $"'{item.MOBILE}','1','','207fa1a9-160c-4943-a89b-8fa4db0547ce', '2', '1','','');"; + conn.Execute(sql); + } + else + { + var sql = + $"UPDATE StuInfoBasic SET StuName='{item.StuName}',GenderNo={xb},IdentityCardNo='{item.IdentityCardNo}'," + + $"Grade='{item.Grade}',DeptNo='{item.DeptNo}',StuCode='{item.CODE}',mobile='{item.MOBILE}'," + + $"MajorNo='{item.MajorNo}',ClassNo='{item.ClassNo}' where StuNo='{stu.StuNo}';"; + conn.Execute(sql); + } + } + + + } + //插入数据同步结果 + using (IDbConnection conncore = new SqlConnection(_admsConnection)) + { + conncore.Execute( + "insert into LR_Base_Log(F_LogId,F_CategoryId,F_SourceObjectId,F_SourceContentJson,F_OperateTime) values(newid(),999,'从中间库同步学生信息到数校完成','学生同步数量:" + + entityList.Count() + "条',getdate())"); + } + } + catch (Exception e) + { + using (IDbConnection conncore = new SqlConnection(_admsConnection)) + { + conncore.Execute( + "insert into LR_Base_Log(F_LogId,F_CategoryId,F_SourceObjectId,F_SourceContentJson,F_OperateTime) values(newid(),999,'从中间库同步学生信息到数校异常','" + + e.Message + "',getdate())"); + } + } + } + catch (Exception e) + { + using (IDbConnection conn = new SqlConnection(_admsConnection)) + { + conn.Execute( + "insert into LR_Base_Log(F_LogId,F_CategoryId,F_SourceObjectId,F_SourceContentJson,F_OperateTime) values(newid(),999,'从中间库同步学生信息到数校异常','错误信息:" + + e.Message + "',getdate())"); + } + } + } + + /// + /// 从中间库同步教师数据 + /// + public static void SyncEmpInfoAcc() + { + try + { + + IEnumerable entityList = null; + using (IDbConnection conn = new SqlConnection(_htMiddleConnection)) + { + entityList = conn.Query($"SELECT * FROM nc_user"); + } + + try + { + //插入sql + foreach (var item in entityList) + { + var id = item.ID.Length == 30 ? Guid.ParseExact(item.ID, "N") : Guid.NewGuid(); + var MZ = ""; + var xb = item.GENDER == "1" ? 1 : 0; + + UserEntity model = null; + EmpInfoEntity stu = null; + using (IDbConnection xbconn = new SqlConnection(_admsConnection)) + { + model = xbconn.QueryFirstOrDefault($"select * from LR_Base_User where F_Account='{item.USERNAME}'"); + + if (model == null) + { + + var key = Md5Helper.Encrypt(CreateNo(), 16).ToLower(); + var pwd = Md5Helper.Encrypt(DESEncrypt.Encrypt(Md5Helper.Encrypt("ht123456", 32).ToLower(), key).ToLower(), 32).ToLower(); + + + var userSql = + $"INSERT INTO LR_Base_User (F_UserId,F_EnCode,F_Account,F_Mobile,F_Password,F_Secretkey,F_RealName,F_Gender,F_CompanyId," + + $"F_DepartmentId,F_DeleteMark,F_EnabledMark,F_Description,F_CreateDate,F_CreateUserId,F_CreateUserName,F_IdentityCardNo) VALUES('{Guid.NewGuid():D}'," + + $"'{item.USERNAME}','{item.USERNAME}','{item.MOBILE}','{pwd}','{key}','{item.NAME}','{xb}','207fa1a9-160c-4943-a89b-8fa4db0547ce','{item.MOCODE}',0,1,'教师'," + + $"'{DateTime.Now:yyyy-MM-dd hh:mm:ss}','System','数据同步','{item.CARDNO}');"; + + xbconn.Execute(userSql); + + + } + + } + + using (var conn = new SqlConnection(_misConnection)) + { + stu = conn.QueryFirstOrDefault($"select * from EmpInfo where EmpNo='{item.USERNAME}'"); + + if (stu == null) + { + var sql = "INSERT INTO EmpInfo (EmpId,EmpNo,EmpName,GenderNo,DeptNo,IdentityCardNo,mobile,EMail,IsInActiveStatus,CheckMark,F_CompanyId) " + + $"VALUES('{id}','{item.USERNAME}','{item.NAME}','{xb}','{item.MOCODE}','{item.CARDNO}', '{item.MOBILE}', '{item.EMAIL}'," + + $"'{item.STATUS}','1','207fa1a9-160c-4943-a89b-8fa4db0547ce');"; + conn.Execute(sql); + } + else + { + var sql = + $"UPDATE EmpInfo SET EmpName='{item.NAME}',GenderNo={xb},IdentityCardNo='{item.CARDNO}'," + + $"DeptNo='{item.MOCODE}',mobile='{item.MOBILE}',EMail='{item.EMAIL}',IsInActiveStatus='{item.STATUS}' where EmpNo='{stu.EmpNo}';"; + conn.Execute(sql); + } + } + + + } + //插入数据同步结果 + using (IDbConnection conncore = new SqlConnection(_admsConnection)) + { + conncore.Execute( + "insert into LR_Base_Log(F_LogId,F_CategoryId,F_SourceObjectId,F_SourceContentJson,F_OperateTime) values(newid(),999,'从中间库同步学生信息到数校完成','学生同步数量:" + + entityList.Count() + "条',getdate())"); + } + } + catch (Exception e) + { + using (IDbConnection conncore = new SqlConnection(_admsConnection)) + { + conncore.Execute( + "insert into LR_Base_Log(F_LogId,F_CategoryId,F_SourceObjectId,F_SourceContentJson,F_OperateTime) values(newid(),999,'从中间库同步学生信息到数校异常','" + + e.Message + "',getdate())"); + } + } + } + catch (Exception e) + { + using (IDbConnection conn = new SqlConnection(_admsConnection)) + { + conn.Execute( + "insert into LR_Base_Log(F_LogId,F_CategoryId,F_SourceObjectId,F_SourceContentJson,F_OperateTime) values(newid(),999,'从中间库同步学生信息到数校异常','错误信息:" + + e.Message + "',getdate())"); + } + } + } + #endregion + + + private static string CreateNo() + { + Random random = new Random(); + string strRandom = random.Next(1000, 10000).ToString(); //生成编号 + string code = DateTime.Now.ToString("yyyyMMddHHmmss") + strRandom;//形如 + return code; + } + + + + } +} diff --git a/DigitalSchoolApi/Controllers/YKTController.cs b/DigitalSchoolApi/Controllers/YKTController.cs index 5bc2f32..f41345e 100644 --- a/DigitalSchoolApi/Controllers/YKTController.cs +++ b/DigitalSchoolApi/Controllers/YKTController.cs @@ -680,5 +680,32 @@ namespace DigitalSchoolApi.Controllers } #endregion + + #region 和田数据同步 + + /// + /// 从中间库中同步到数校 + /// + /// + public IHttpActionResult SyncDataToDs() + { + //部门 + RecurringJob.AddOrUpdate("HTSyncDepartmentToDs", + () => HTSchoolController.SyncDepartment(), + Cron.Daily(1), TimeZoneInfo.Local); + + //教师 + RecurringJob.AddOrUpdate("HTSyncEmpInfoToDs", + () => HTSchoolController.SyncEmpInfoAcc(), + Cron.Daily(1), TimeZoneInfo.Local); + //学生 + RecurringJob.AddOrUpdate("HTSyncStuInfoToDs", + () => HTSchoolController.SyncStuInfoAcc(), + Cron.Daily(1), TimeZoneInfo.Local); + + + return Ok(); + } + #endregion } } diff --git a/DigitalSchoolApi/DigitalSchoolApi.csproj b/DigitalSchoolApi/DigitalSchoolApi.csproj index c1c4720..81849f6 100644 --- a/DigitalSchoolApi/DigitalSchoolApi.csproj +++ b/DigitalSchoolApi/DigitalSchoolApi.csproj @@ -405,6 +405,7 @@ + @@ -422,6 +423,7 @@ + diff --git a/DigitalSchoolApi/Models/HtEntity.cs b/DigitalSchoolApi/Models/HtEntity.cs new file mode 100644 index 0000000..624210e --- /dev/null +++ b/DigitalSchoolApi/Models/HtEntity.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DigitalSchoolApi.Models +{ + internal interface HtEntity + { + } + + public class HTMiddleOrganize + { + public string ID { get; set; } + + public string NAME { get; set; } + + public string FID { get; set; } + + public string CODE { get; set; } + } + + public class HTMiddleStuInfo + { + + public string ID { get; set; } + public string USERNAME { get; set; } + + public string StuName { get; set; } + + public string IdentityCardNo { get; set; } + + public string NationalityNo { get; set; } + + public string Grade { get; set; } + + public string EntranceDate { get; set; } + + public string RegisterDate { get; set; } + + public string MailAddress { get; set; } + + public string DeptNo { get; set; } + + public string MajorNo { get; set; } + + public string ClassNo { get; set; } + + public string GenderNo { get; set; } + + public string CODE { get; set; } + + public string MOBILE { get; set; } + + public string EMAIL { get; set; } + } + + public class HTMiddleEmpInfo + { + + public string ID { get; set; } + + public string CODE { get; set; } + + + public string NAME { get; set; } + public string USERNAME { get; set; } + + public string MOCODE { get; set; } + + public string GENDER { get; set; } + + public string CARDNO { get; set; } + + public string MOBILE { get; set; } + + public string EMAIL { get; set; } + + public string STATUS { get; set; } + + } +} diff --git a/DigitalSchoolApi/Web.config b/DigitalSchoolApi/Web.config index 1842fb7..d8797c4 100644 --- a/DigitalSchoolApi/Web.config +++ b/DigitalSchoolApi/Web.config @@ -68,7 +68,7 @@ - +