1107 lines
52 KiB
C#
1107 lines
52 KiB
C#
using APT.Infrastructure.Core;
|
||
using APT.BaseData.Domain.Entities.FM;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using APT.Utility;
|
||
using APT.BaseData.Domain.ApiModel.FM;
|
||
using Newtonsoft.Json;
|
||
using APT.BaseData.Domain.ApiModel.Platform;
|
||
using APT.BaseData.Domain.Entities;
|
||
using APT.Infrastructure.Api;
|
||
using System.Linq.Expressions;
|
||
using APT.BaseData.Domain.Enums;
|
||
using System.IO;
|
||
using APT.BaseData.Domain.Entities.OP;
|
||
using APT.Migrations;
|
||
using APT.BaseData.Domain.Enums.PF;
|
||
using static APT.Utility.FileUtils;
|
||
using System.Security.Cryptography;
|
||
using static APT.Utility.RSAHelper;
|
||
using System.Text;
|
||
using Microsoft.AspNetCore.Http;
|
||
|
||
namespace APT.FM.WebApi.Controllers.Api.FM
|
||
{
|
||
/// <summary>
|
||
/// 数据同步
|
||
/// </summary>
|
||
[Route("api/FM/DataSync")]
|
||
public class DataSyncController : APTApiController<T_FM_USER>
|
||
{
|
||
//1、组织有唯一编号
|
||
//2、岗位也有唯一编号
|
||
//3、员工工号唯一
|
||
//4、根据 MODIFY_TIME 判断是否做信息同步
|
||
|
||
/// <summary>
|
||
/// 信息同步 岗位 部门 人员
|
||
/// </summary>
|
||
/// <param name="listEntity"></param>
|
||
/// <returns></returns>
|
||
[HttpPost, Route("Sync")]
|
||
public JsonActionResult<bool> Sync([FromBody] ListDate listEntity)
|
||
{
|
||
return SafeExecute(() =>
|
||
{
|
||
#region 签名验证 ( Key 获取已经注释 ) 生成Key ORG_ID.ToString() + DateTime.Now.ToString("yyyyMMdd")
|
||
|
||
IHeaderDictionary Headers = Request.Headers;
|
||
string Signature = string.Empty;
|
||
//string Signature = "snJ0cOfn7aZ54nKcMQnz3tG1kL8IyN5H/FHsVyDpJxWyH2QNgZlCE+KSHQqcKR4PzZnpaqp7/awwGvleUsoFRn6pc1of6UZsCTEeWF2zG5ciHosp+jRhNGp55bLXCnqt+9bj9KU4Ca+lpHP/9B8nE6OW/9zoRkccFXxeZBSg32fBmlHlkjvi9cmTc0oQ/osdoRZ2HdiLJ6WZNXr9Uz9nUj7Du/qXvN5BZN7V8pxxdm9mgGnCMLMwz7cglB9mYyt/tKp9ur2UjO3bwFJ7ypZWWCQ9Af/dJe0Z8i9muTQptJCuXJ6kHjYaFHm1jny0rtO2pbaO7WPyYJQeke8d16yVNg==";
|
||
if (string.IsNullOrEmpty(Signature))
|
||
{
|
||
if (Headers.ContainsKey("signature"))
|
||
{
|
||
Signature = Headers["signature"];
|
||
}
|
||
else if (Headers.ContainsKey("Signature"))
|
||
{
|
||
Signature = Headers["Signature"];
|
||
}
|
||
else
|
||
{
|
||
throw new Exception("未获取到签名!");
|
||
}
|
||
}
|
||
//string privateKey = "<RSAKeyValue><Modulus>uegx1Y4vPGdg4qQJOkUyocR4Ir5dKu7+UJRUmPpADwuac9LBTAfiEf7THa5nILLS2iuMR0jBmFZC6WbyMmSAD4fuCYmIUERf6QKAFSctNFk4tXm2dlUWwsB6YurSj0queOhm6egQ+jcjsn8iq3D2+pzQcArXojHwRAUF0Nsa4CVmpLk4YSuADMBPbaT/omON08E+Qv1xw9ho2QIC+HHzvBTHtFVvlpOiAdtnZ0HfSXJ618rs4j5/WVdZ4rbKdgnlnRsMFogOmu+o0rMni4hi+kGZUqSw/heYJOZY2UOIBO6KTDwcFBWhDTbAMvl1NxalsdW1J0RPY6qsVbov4FapuQ==</Modulus><Exponent>AQAB</Exponent><P>30hSFbm0DV4/qtczGiKFdhg2xHTqWmd7lvGOlwb1LYfihiS6sVISiPPL6/etneOxb/zJF6aoldNoTWkSrEhpFvl8hb7jyhktzHBejXOUm2Ro6u7N+6MWUUm3BkOVDmJ3pgDY0lSua5ZBwac7N+N2nDHLg0R7dX/1QyOwdbWQXvs=</P><Q>1SXcOwGErAm99l+LapYgib30oiLVN0fBUTpoICrigYSOKYPxhnPhDYyic1RqpsjFg+cT8YlXe1Kr8WbM9YOGaGM4MzkpCqGnkPMNoYjDQazZ+CQ3Nzkd93/GfzMqOZVksr9ZzfVR9E6Brn4ywJ5j8X/KoGi+6D++omKQ477f69s=</Q><DP>snsZ+nnWPnVfSU36cGK18l+Kr+GRT7C2r0LqKzmJlNqxLW+AuKuVW1oeYMI8SyCuPol/qWM0EYfLMU3Telnrf0zwx+x+I5ea73fHbSS93rUV1O4NQ5/rABF/twcgyD3XzJ+Ssha00hVq/MST5qnxrwty1bxRP+yH/iIyNPVssS8=</DP><DQ>yFSZNOwsYfWWESWjxz3qvwtGDc1nUFmknE+k5fbohIqtgt979b6b2zw+wt6ojrFM0rgwymcnTcVZzb2tDWPcw+fdPmeO52sgLuACA7yip+tpwgtnygNo4uG5EnxoR07eIhIuuaDEsjXHNNVvphI4JRbSvwkzxN2EsuKpAyS3GNk=</DQ><InverseQ>bOC30Dhc63ajKaghFvDnQEBWC60KWTp9dgzES90IIqCOF6l17hDLBy1aKn2I3ixT9y26IFAbBGCK50PNMW6aKvJUK3gBl+rjeWzxTEUFo2A+p0weBxRsRM3AFWObzUgXg292azJW755vFTY8cauC6E5Jgp+lM8zcMvBpCEQn2X0=</InverseQ><D>LEzhezM7nFhCJR/TtxgAPb40porYZr+2yHrgQef4Vd18+7awKy8BtyoTItKJbqhOSIDyF5aF04hSv42xj0KVpZ3NomYsnnv8oujenqvMQNo2AkCzszUJjHUTdPjiHhU8yEERLRII4ac8EW/sUhBEOmod3WUoB1WBHKRZw3BC0kCPWiH1m3zjyyU9IIYBqitqZ5BKaVsAR8jae+HiN7xRO82NkVHMpCFPPJM/yEE8v8XMXdpFVRc9aWfHTtEItqg9z4DSs8PHgdiiOy0dU/nLHz97LGQUSX0CTxUGskYzgSnhtq4X2osAEOSRofioSgO88Go1f3BZLapDq/LunZ2y5Q==</D></RSAKeyValue>"; // 私钥
|
||
|
||
////////string privateKey2 = "<RSAKeyValue><P>30hSFbm0DV4/qtczGiKFdhg2xHTqWmd7lvGOlwb1LYfihiS6sVISiPPL6/etneOxb/zJF6aoldNoTWkSrEhpFvl8hb7jyhktzHBejXOUm2Ro6u7N+6MWUUm3BkOVDmJ3pgDY0lSua5ZBwac7N+N2nDHLg0R7dX/1QyOwdbWQXvs=</P><Q>1SXcOwGErAm99l+LapYgib30oiLVN0fBUTpoICrigYSOKYPxhnPhDYyic1RqpsjFg+cT8YlXe1Kr8WbM9YOGaGM4MzkpCqGnkPMNoYjDQazZ+CQ3Nzkd93/GfzMqOZVksr9ZzfVR9E6Brn4ywJ5j8X/KoGi+6D++omKQ477f69s=</Q><DP>snsZ+nnWPnVfSU36cGK18l+Kr+GRT7C2r0LqKzmJlNqxLW+AuKuVW1oeYMI8SyCuPol/qWM0EYfLMU3Telnrf0zwx+x+I5ea73fHbSS93rUV1O4NQ5/rABF/twcgyD3XzJ+Ssha00hVq/MST5qnxrwty1bxRP+yH/iIyNPVssS8=</DP><DQ>yFSZNOwsYfWWESWjxz3qvwtGDc1nUFmknE+k5fbohIqtgt979b6b2zw+wt6ojrFM0rgwymcnTcVZzb2tDWPcw+fdPmeO52sgLuACA7yip+tpwgtnygNo4uG5EnxoR07eIhIuuaDEsjXHNNVvphI4JRbSvwkzxN2EsuKpAyS3GNk=</DQ><InverseQ>bOC30Dhc63ajKaghFvDnQEBWC60KWTp9dgzES90IIqCOF6l17hDLBy1aKn2I3ixT9y26IFAbBGCK50PNMW6aKvJUK3gBl+rjeWzxTEUFo2A+p0weBxRsRM3AFWObzUgXg292azJW755vFTY8cauC6E5Jgp+lM8zcMvBpCEQn2X0=</InverseQ><D>LEzhezM7nFhCJR/TtxgAPb40porYZr+2yHrgQef4Vd18+7awKy8BtyoTItKJbqhOSIDyF5aF04hSv42xj0KVpZ3NomYsnnv8oujenqvMQNo2AkCzszUJjHUTdPjiHhU8yEERLRII4ac8EW/sUhBEOmod3WUoB1WBHKRZw3BC0kCPWiH1m3zjyyU9IIYBqitqZ5BKaVsAR8jae+HiN7xRO82NkVHMpCFPPJM/yEE8v8XMXdpFVRc9aWfHTtEItqg9z4DSs8PHgdiiOy0dU/nLHz97LGQUSX0CTxUGskYzgSnhtq4X2osAEOSRofioSgO88Go1f3BZLapDq/LunZ2y5Q==</D></RSAKeyValue>"; // 仅私钥
|
||
|
||
string publicKey = "<RSAKeyValue><Modulus>uegx1Y4vPGdg4qQJOkUyocR4Ir5dKu7+UJRUmPpADwuac9LBTAfiEf7THa5nILLS2iuMR0jBmFZC6WbyMmSAD4fuCYmIUERf6QKAFSctNFk4tXm2dlUWwsB6YurSj0queOhm6egQ+jcjsn8iq3D2+pzQcArXojHwRAUF0Nsa4CVmpLk4YSuADMBPbaT/omON08E+Qv1xw9ho2QIC+HHzvBTHtFVvlpOiAdtnZ0HfSXJ618rs4j5/WVdZ4rbKdgnlnRsMFogOmu+o0rMni4hi+kGZUqSw/heYJOZY2UOIBO6KTDwcFBWhDTbAMvl1NxalsdW1J0RPY6qsVbov4FapuQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"; // 公钥
|
||
|
||
//using (var rsa = RSA.Create())
|
||
//{
|
||
// // 获取私钥和公钥
|
||
// privateKey = rsa.ToXmlString(true); // 包含私钥
|
||
// publicKey = rsa.ToXmlString(false); // 仅公钥
|
||
//}
|
||
|
||
// 签名
|
||
byte[] dataBytes = Encoding.UTF8.GetBytes(listEntity.ORG_ID.ToString() + DateTime.Now.ToString("yyyyMMdd"));
|
||
|
||
//byte[] signature = SignData(dataBytes, privateKey);//签名
|
||
//string Signature2 = Convert.ToBase64String(signature);//获取签名字符串
|
||
|
||
byte[] check = Convert.FromBase64String(Signature);
|
||
// 验证签名
|
||
bool isVerified = VerifyData(dataBytes, check, publicKey);
|
||
//bool isVerified2 = VerifyData(dataBytes, signature, publicKey);
|
||
|
||
if (!isVerified)
|
||
{
|
||
throw new Exception("签名验证失败");
|
||
}
|
||
|
||
#endregion
|
||
|
||
Guid USER_ID = Guid.Empty;
|
||
var admin = GetEntity<T_FM_USER>(e => e.CODE.Contains("admin"));
|
||
if (admin != null)
|
||
{
|
||
USER_ID = admin.ID;
|
||
}
|
||
else
|
||
{
|
||
throw new Exception("获取管理员信息失败!");
|
||
}
|
||
if (listEntity == null)
|
||
{
|
||
throw new Exception("传参有误!");
|
||
}
|
||
|
||
#region 签名、权鉴、固有数据 、次数 验证
|
||
|
||
|
||
var Tenant = this.Request.Headers["Tenant"];
|
||
if (listEntity.ORG_ID == Guid.Empty)
|
||
throw new Exception("公司ID不能为空");
|
||
|
||
Expression<Func<T_FM_SYNC_LIMIT, bool>> expressione = e => !e.IS_DELETED;
|
||
T_FM_SYNC_LIMIT modelSync = null;
|
||
if (!string.IsNullOrEmpty(listEntity.PARAMETER))
|
||
{
|
||
expressione = expressione.And(e => e.PARAMETER == listEntity.PARAMETER);
|
||
}
|
||
var listLimit = GetEntities(expressione, null, null);
|
||
if (listLimit == null || !listLimit.Any())
|
||
{
|
||
modelSync = new T_FM_SYNC_LIMIT();
|
||
modelSync.ORG_ID = listEntity.ORG_ID;
|
||
modelSync.TIMES = 5;
|
||
if (!string.IsNullOrEmpty(listEntity.PARAMETER))
|
||
{
|
||
modelSync.PARAMETER = listEntity.PARAMETER;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
modelSync = listLimit.ToList()[0];
|
||
}
|
||
if (modelSync.TIMES <= 0)
|
||
{
|
||
throw new Exception("同步次数超限");
|
||
}
|
||
modelSync.DATE = DateTime.Now.Date;
|
||
modelSync.TIMES--;
|
||
|
||
#endregion
|
||
|
||
#region 调用具体的数据同步
|
||
|
||
string MsgP = string.Empty;
|
||
bool resultP = true;
|
||
string MsgD = string.Empty;
|
||
bool resultD = true;
|
||
string MsgU = string.Empty;
|
||
bool resultU = true;
|
||
if (listEntity.listPost != null && listEntity.listPost.Any() && listEntity.listPost.Count > 0)
|
||
{
|
||
resultP = SyncPost(listEntity.listPost, listEntity.ORG_ID, (int)PFSysLogTypeEnum.SYNC_Post, USER_ID, ref MsgP);
|
||
}
|
||
if (listEntity.listDepartment != null && listEntity.listDepartment.Any() && listEntity.listDepartment.Count > 0)
|
||
{
|
||
resultD = SyncDepartment(listEntity.listDepartment, listEntity.ORG_ID, (int)PFSysLogTypeEnum.SYNC_Department, USER_ID, ref MsgD);
|
||
}
|
||
if (listEntity.listUser != null && listEntity.listUser.Any() && listEntity.listUser.Count > 0)
|
||
{
|
||
resultU = SyncUser(listEntity.listUser, listEntity.ORG_ID, (int)PFSysLogTypeEnum.SYNC_User, USER_ID, Tenant, ref MsgU);
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 同步限制信息数据库更新
|
||
|
||
if (modelSync != null)
|
||
{
|
||
this.UnifiedCommit(() =>
|
||
{
|
||
UpdateEntityNoCommit(modelSync);
|
||
});
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 返参
|
||
|
||
if (resultP && resultD && resultU)
|
||
{
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
string Msg = string.Empty;
|
||
if (!resultP)
|
||
{
|
||
Msg += MsgP;
|
||
}
|
||
if (resultD)
|
||
{
|
||
Msg += (string.IsNullOrEmpty(Msg) ? "" : ";") + MsgD;
|
||
}
|
||
if (resultU)
|
||
{
|
||
Msg += (string.IsNullOrEmpty(Msg) ? "" : ";") + MsgU;
|
||
}
|
||
throw new Exception(Msg);
|
||
}
|
||
#endregion
|
||
});
|
||
}
|
||
|
||
/// <summary>
|
||
/// 手动隐患上报 单次 一张图片 必备输入信息 imgID = CONTENT_ID
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost, Route("SyncUploadFile")]
|
||
public JsonActionResult<bool> SyncUploadFile()
|
||
{
|
||
return SafeExecute<bool>(() =>
|
||
{
|
||
var httpRequest = HttpContext.Request;
|
||
Microsoft.AspNetCore.Http.IFormCollection formInfo = httpRequest.Form;
|
||
string strOrgId = string.Empty;
|
||
string strTYPE = string.Empty;
|
||
string strCODE = string.Empty;
|
||
foreach (var item in formInfo)
|
||
{
|
||
if (item.Key == "ORG_ID")
|
||
{
|
||
strOrgId = item.Value;//组织
|
||
}
|
||
else if (item.Key == "TYPE")
|
||
{
|
||
strTYPE = item.Value;//类型
|
||
}
|
||
else if (item.Key == "CODE")
|
||
{
|
||
strCODE = item.Value; // 编号
|
||
}
|
||
}
|
||
|
||
#region 签名验证 ( Key 获取已经注释 ) 生成Key ORG_ID.ToString() + DateTime.Now.ToString("yyyyMMdd")
|
||
|
||
IHeaderDictionary Headers = Request.Headers;
|
||
string Signature = string.Empty;
|
||
if (string.IsNullOrEmpty(Signature))
|
||
{
|
||
if (Headers.ContainsKey("signature"))
|
||
{
|
||
Signature = Headers["signature"];
|
||
}
|
||
else if (Headers.ContainsKey("Signature"))
|
||
{
|
||
Signature = Headers["Signature"];
|
||
}
|
||
else
|
||
{
|
||
throw new Exception("未获取到签名!");
|
||
}
|
||
}
|
||
|
||
string publicKey = "<RSAKeyValue><Modulus>uegx1Y4vPGdg4qQJOkUyocR4Ir5dKu7+UJRUmPpADwuac9LBTAfiEf7THa5nILLS2iuMR0jBmFZC6WbyMmSAD4fuCYmIUERf6QKAFSctNFk4tXm2dlUWwsB6YurSj0queOhm6egQ+jcjsn8iq3D2+pzQcArXojHwRAUF0Nsa4CVmpLk4YSuADMBPbaT/omON08E+Qv1xw9ho2QIC+HHzvBTHtFVvlpOiAdtnZ0HfSXJ618rs4j5/WVdZ4rbKdgnlnRsMFogOmu+o0rMni4hi+kGZUqSw/heYJOZY2UOIBO6KTDwcFBWhDTbAMvl1NxalsdW1J0RPY6qsVbov4FapuQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"; // 公钥
|
||
|
||
// 签名
|
||
byte[] dataBytes = Encoding.UTF8.GetBytes(strOrgId + DateTime.Now.ToString("yyyyMMdd"));
|
||
|
||
byte[] check = Convert.FromBase64String(Signature);
|
||
// 验证签名
|
||
bool isVerified = VerifyData(dataBytes, check, publicKey);
|
||
|
||
if (!isVerified)
|
||
{
|
||
throw new Exception("签名验证失败");
|
||
}
|
||
|
||
#endregion
|
||
|
||
var files = formInfo.Files;
|
||
if (files == null)
|
||
{
|
||
throw new Exception("附件缺失!");
|
||
}
|
||
|
||
if (string.IsNullOrEmpty(strOrgId))
|
||
throw new Exception("组织不允许为空");
|
||
if (string.IsNullOrEmpty(strCODE))
|
||
throw new Exception("用户编号不允许为空");
|
||
var orgId = new Guid(strOrgId);
|
||
var now = DateTime.Now;
|
||
var user = GetEntity<T_FM_USER>(e => e.CODE == strCODE);
|
||
if (user == null)
|
||
throw new Exception("未找到编号对应的用户");
|
||
var LoginID = user.ID;
|
||
T_FM_PERSON person = null;
|
||
bool isAdd = false;
|
||
if (strTYPE != "Nav_UserPhotoFiles" && !user.PERSON_ID.HasValue)
|
||
{
|
||
isAdd = true;
|
||
//添加用户信息 按理不会过来
|
||
person = new T_FM_PERSON();
|
||
person.ID = Guid.NewGuid();
|
||
user.PERSON_ID = person.ID;
|
||
person.CODE = user.CODE;
|
||
person.NAME = user.NAME;
|
||
person.ORG_ID = user.ORG_ID;
|
||
person.SEX = user.SEX;
|
||
}
|
||
|
||
#region 图片处理
|
||
|
||
var strImgID = string.Empty;
|
||
if (formInfo.ContainsKey("imgFileID"))
|
||
{
|
||
strImgID = formInfo["imgFileID"][0];
|
||
}
|
||
Guid ImgID = Guid.Empty;
|
||
if (strImgID != null && !string.IsNullOrEmpty(strImgID))
|
||
{
|
||
try
|
||
{
|
||
ImgID = new Guid(strImgID.ToString());
|
||
}
|
||
catch { }
|
||
}
|
||
if (ImgID == Guid.Empty)
|
||
ImgID = Guid.NewGuid();
|
||
|
||
string filePath = GetFilePath(orgId);
|
||
var fullFilePath = $"{ ConfigurationManager.AppSettings["Img_Local"]}{filePath}";
|
||
ImageConverterFactory imageConverterFactory = new ImageConverterFactory();
|
||
var host = ConfigurationManager.AppSettings["SapInvokeHost"];
|
||
|
||
List<T_PF_FILE> fileList = new List<T_PF_FILE>();
|
||
List<T_PF_IMG_FILE> imgFileList = new List<T_PF_IMG_FILE>();
|
||
List<T_FM_USER_PHOTO_FILE> listPhoto = null;//照片 new List<T_FM_USER_PHOTO_FILE>();//照片
|
||
List<T_FM_PERSON_IDCARD_FILE> listIDCard = null;//身份证 new List<T_FM_PERSON_IDCARD_FILE>();//身份证
|
||
List<T_FM_PERSON_EDUCATION_FILE> listEducation = null;//学历证 new List<T_FM_PERSON_EDUCATION_FILE>();//学历证
|
||
List<T_FM_PERSON_CERTIFICATE_FILE> listCertificate = null; //学历证 new List<T_FM_PERSON_CERTIFICATE_FILE>();//证书
|
||
|
||
if (!Directory.Exists(fullFilePath))
|
||
{
|
||
Directory.CreateDirectory(fullFilePath);
|
||
}
|
||
|
||
foreach (var item in files)
|
||
{
|
||
if (item != null)
|
||
{
|
||
//文件后缀
|
||
var fileExtension = Path.GetExtension(item.FileName);
|
||
var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得时间字符串
|
||
var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数
|
||
var saveName = strDateTime + strRan + fileExtension;
|
||
string fileName = item.FileName;
|
||
|
||
//插入图片数据
|
||
using (FileStream fs = System.IO.File.Create(fullFilePath + saveName))//fullFilePath + fileName wyw
|
||
{
|
||
item.CopyTo(fs);
|
||
fs.Flush();
|
||
}
|
||
if (fileExtension == ".jpg" || fileExtension == ".png" || fileExtension == ".jpeg")
|
||
{
|
||
using (FileStream inputFileStream = new FileStream(fullFilePath + saveName, FileMode.Open, FileAccess.Read))
|
||
{
|
||
MemoryStream compressedStream = CompressImageFileStream(inputFileStream);
|
||
inputFileStream.Close();
|
||
using (FileStream outputFileStream = new FileStream(fullFilePath + saveName, FileMode.Create, FileAccess.Write))
|
||
{
|
||
compressedStream.CopyTo(outputFileStream);
|
||
}
|
||
}
|
||
}
|
||
var pos = fileName.LastIndexOf(".");
|
||
var extendName = fileName.Substring(pos);
|
||
List<ConvertImageFile> list = new List<ConvertImageFile>();
|
||
bool isSuppot = imageConverterFactory.Support(extendName);
|
||
bool isSaveSelf = true;
|
||
T_PF_IMG_FILE imgFile = new T_PF_IMG_FILE
|
||
{
|
||
ID = ImgID,
|
||
FILE_NAME = fileName,
|
||
FILE_TYPE = item.ContentType,
|
||
ORG_ID = orgId,
|
||
CREATER_ID = LoginID,
|
||
CREATE_TIME = now
|
||
};
|
||
var inputStream = item.OpenReadStream();
|
||
//支持转换时,按类型转为图片,否则直接存储
|
||
if (isSuppot)
|
||
{
|
||
if (!string.IsNullOrEmpty(host))
|
||
{
|
||
ConvertImageFileParam param = new ConvertImageFileParam();
|
||
param.FileName = fileName;
|
||
Byte[] fileData = new Byte[(int)item.Length];
|
||
Stream sr = inputStream;//创建数据流对象
|
||
sr.Read(fileData, 0, (int)item.Length);
|
||
param.FileData = fileData;
|
||
string url = host + "ImageConvert/ImageConvert";
|
||
ConvertImageFileParam retModel =
|
||
WebUtils.Execute<ConvertImageFileParam>(url, param, string.Empty, SendType.Post);
|
||
if (retModel != null && retModel.Files != null && retModel.Files.Any())
|
||
list.AddRange(retModel.Files);
|
||
}
|
||
else
|
||
{
|
||
var convert = imageConverterFactory.CreateImageConverter(fileName);
|
||
convert.ConvertToImage(fileName, inputStream, list);
|
||
}
|
||
if (isSaveSelf)//保存自身数据
|
||
{
|
||
Byte[] fileData = new Byte[(int)item.Length];
|
||
Stream sr = inputStream;//创建数据流对象
|
||
sr.Read(fileData, 0, (int)item.Length);
|
||
T_PF_FILE file = new T_PF_FILE
|
||
{
|
||
FILE_NAME = fileName,
|
||
FILE_TYPE = item.ContentType,
|
||
//FILE_DATA = fileData,
|
||
ORG_ID = orgId,
|
||
//FILE_PATH = filePath + fileName
|
||
FILE_PATH = filePath + saveName,//wyw,
|
||
CREATER_ID = LoginID,
|
||
CREATE_TIME = now
|
||
};
|
||
imgFile.FILE_ID = file.ID;
|
||
imgFile.Nav_File = file;
|
||
fileList.Add(file);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
ConvertImageFile tmpImgFile = new ConvertImageFile();
|
||
//tmpImgFile.FileName = fileName;
|
||
tmpImgFile.FileName = saveName;//wyw
|
||
tmpImgFile.FileType = item.ContentType;
|
||
Byte[] fileData = new Byte[(int)item.Length];
|
||
Stream sr = inputStream;//创建数据流对象
|
||
sr.Read(fileData, 0, (int)item.Length);
|
||
tmpImgFile.FileData = fileData;
|
||
list.Add(tmpImgFile);
|
||
}
|
||
//保存文件数据
|
||
if (list.Any())
|
||
{
|
||
int i = 1;
|
||
foreach (var fileitem in list)
|
||
{
|
||
T_PF_FILE file = new T_PF_FILE
|
||
{
|
||
ID = Guid.NewGuid(),
|
||
FILE_NAME = fileitem.FileName,
|
||
FILE_TYPE = fileitem.FileType,
|
||
//FILE_DATA = fileitem.FileData,
|
||
//FILE_PATH = filePath + fileName,
|
||
FILE_PATH = filePath + saveName,//wyw,
|
||
ORG_ID = orgId,
|
||
CREATER_ID = LoginID,
|
||
CREATE_TIME = now
|
||
};
|
||
|
||
if (!isSuppot && isSaveSelf)
|
||
{
|
||
imgFile.FILE_ID = file.ID;
|
||
imgFile.Nav_File = file;
|
||
}
|
||
|
||
if (string.IsNullOrEmpty(imgFile.FILE_PATH) && !string.IsNullOrEmpty(file.FILE_PATH))
|
||
imgFile.FILE_PATH = file.FILE_PATH;
|
||
|
||
switch (strTYPE)
|
||
{
|
||
case "Nav_UserPhotoFiles"://照片 头像文件 T_FM_USER_PHOTO_FILE
|
||
listPhoto = new List<T_FM_USER_PHOTO_FILE>();//照片
|
||
listPhoto.Add(new T_FM_USER_PHOTO_FILE()
|
||
{
|
||
ID = Guid.NewGuid(),
|
||
ORG_ID = orgId,
|
||
IMG_FILE_ID = imgFile.ID,
|
||
USER_ID = user.ID,
|
||
CREATER_ID = LoginID,
|
||
CREATE_TIME = now
|
||
});
|
||
break;
|
||
case "Nav_IDCardFiles"://身份证 Nav_IDCardFiles T_FM_PERSON_IDCARD_FILE
|
||
listIDCard = new List<T_FM_PERSON_IDCARD_FILE>();//身份证
|
||
listIDCard.Add(new T_FM_PERSON_IDCARD_FILE()
|
||
{
|
||
|
||
ID = Guid.NewGuid(),
|
||
ORG_ID = orgId,
|
||
IMG_FILE_ID = imgFile.ID,
|
||
//CODE=
|
||
PERSON_ID = user.PERSON_ID.Value,
|
||
NUM = i,
|
||
CREATER_ID = LoginID,
|
||
CREATE_TIME = now
|
||
});
|
||
break;
|
||
case "Nav_EducationFiles"://学历证 Nav_EducationFiles T_FM_PERSON_EDUCATION_FILE
|
||
listEducation = new List<T_FM_PERSON_EDUCATION_FILE>();//学历证
|
||
listEducation.Add(new T_FM_PERSON_EDUCATION_FILE()
|
||
{
|
||
ID = Guid.NewGuid(),
|
||
ORG_ID = orgId,
|
||
IMG_FILE_ID = imgFile.ID,
|
||
//CODE=
|
||
PERSON_ID = user.PERSON_ID.Value,
|
||
NUM = i,
|
||
CREATER_ID = LoginID,
|
||
CREATE_TIME = now
|
||
|
||
});
|
||
break;
|
||
case "Nav_CertificateFiles"://证书 Nav_CertificateFiles T_FM_PERSON_CERTIFICATE_FILE
|
||
listCertificate = new List<T_FM_PERSON_CERTIFICATE_FILE>();//证书
|
||
listCertificate.Add(new T_FM_PERSON_CERTIFICATE_FILE()
|
||
{
|
||
ID = Guid.NewGuid(),
|
||
ORG_ID = orgId,
|
||
IMG_FILE_ID = imgFile.ID,
|
||
//CODE=
|
||
PERSON_ID = user.PERSON_ID.Value,
|
||
NUM = i,
|
||
CREATER_ID = LoginID,
|
||
CREATE_TIME = now
|
||
});
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
i++;
|
||
fileList.Add(file);
|
||
//imgFileDetailList.Add(detail);
|
||
}
|
||
}
|
||
|
||
imgFileList.Add(imgFile);
|
||
//result.imgFileID = imgFile.ID;
|
||
//result.imgFilePath = imgFile.Nav_File?.FILE_PATH;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
var log = GetLog((int)PFSysLogTypeEnum.SYNC_Files, orgId, user.ID, user.CODE + " 附件同步:" + strTYPE, strCODE);//操作日志
|
||
|
||
#region 数据操作
|
||
try
|
||
{
|
||
//为了不让隐患上报数据冲突 entity.ID 前端直接传入
|
||
this.UnifiedCommit(() =>
|
||
{
|
||
if (fileList != null && fileList.Any())
|
||
BantchSaveEntityNoCommit(fileList);
|
||
if (imgFileList != null && imgFileList.Any())
|
||
BantchSaveEntityNoCommit(imgFileList);
|
||
|
||
if (isAdd)
|
||
{
|
||
if (person != null)
|
||
UpdateEntityNoCommit(person);
|
||
UpdateEntityNoCommit(user);
|
||
}
|
||
if (log != null && log.ID != Guid.Empty)
|
||
UpdateEntityNoCommit(log);
|
||
if (listIDCard != null && listIDCard.Any())
|
||
BantchSaveEntityNoCommit(listIDCard);
|
||
if (listPhoto != null && listPhoto.Any())
|
||
BantchSaveEntityNoCommit(listPhoto);
|
||
if (listEducation != null && listEducation.Any())
|
||
BantchSaveEntityNoCommit(listEducation);
|
||
if (listCertificate != null && listCertificate.Any())
|
||
BantchSaveEntityNoCommit(listCertificate);
|
||
});
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
//提交错误
|
||
throw new Exception(ex.Message);
|
||
}
|
||
|
||
#endregion
|
||
|
||
return true;
|
||
});
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 根据OrgId获取文件夹名称
|
||
/// </summary>
|
||
/// <param name="OrgId"></param>
|
||
/// <returns></returns>
|
||
private string GetFilePath(Guid OrgId)
|
||
{
|
||
string orgid = OrgId.ToString().ToUpperInvariant();
|
||
string pathHead = "";
|
||
if (OrgId != new Guid())
|
||
{
|
||
List<EnumberEntity> listHead = EnumToList<FilePathHead>();
|
||
var info = listHead.FirstOrDefault(e => e.Desction == orgid);
|
||
if (info != null)
|
||
{
|
||
pathHead = info.EnumName;
|
||
}
|
||
}
|
||
DateTime dtNow = DateTime.Now;
|
||
var filePath = string.Format("/{0}/{1}/{2}/", "SYNC", dtNow.ToString("yyyyMM"), dtNow.ToString("yyyyMMdd"));
|
||
return string.IsNullOrEmpty(pathHead) ? filePath : "/" + pathHead + filePath;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 同步岗位
|
||
/// </summary>
|
||
/// <param name="listEntityPass"></param>
|
||
/// <param name="ORG_ID"></param>
|
||
/// <param name="LOG_TYPE"></param>
|
||
/// <param name="USER_ID"></param>
|
||
/// <param name="Msg"></param>
|
||
/// <returns></returns>
|
||
[HttpPost, Route("SyncPost")]
|
||
public bool SyncPost(List<T_FM_USER_POST> listEntityPass, Guid ORG_ID, int LOG_TYPE, Guid USER_ID, ref string Msg)
|
||
{
|
||
//根据CODE 做相同做更新
|
||
var listCode = listEntityPass.Select(e => e.CODE).Distinct().ToList();
|
||
var listCodeSYNC = GetEntities<T_FM_USER_POST>(e => listCode.Contains(e.CODE), null, null);
|
||
listEntityPass = listEntityPass.OrderByDescending(e => e.MODIFY_TIME).ToList();
|
||
int Count = listEntityPass.Count;
|
||
T_FM_USER_POST modelChange = null;
|
||
List<T_FM_USER_POST> listPostUpdate = new List<T_FM_USER_POST>();
|
||
List<T_PF_SYS_LOG> listLog = new List<T_PF_SYS_LOG>();
|
||
|
||
for (int i = 0; i < Count; i++)
|
||
{
|
||
if (i > 0 && listEntityPass[i].CODE == listEntityPass[i - 1].CODE)
|
||
continue;//修改 按时间倒序排 如果编号与上一个相同 直接过
|
||
modelChange = listCodeSYNC.FirstOrDefault(e => e.CODE == listEntityPass[i].CODE);
|
||
|
||
if (modelChange == null)
|
||
{
|
||
listLog.Add(GetLog(LOG_TYPE, ORG_ID, USER_ID, "新增岗位" + listEntityPass[i].NAME, listEntityPass[i].CODE));
|
||
|
||
modelChange = new T_FM_USER_POST();
|
||
modelChange.ID = Guid.NewGuid();
|
||
modelChange.ORG_ID = ORG_ID;
|
||
modelChange.CODE = listEntityPass[i].CODE;
|
||
}
|
||
else
|
||
{
|
||
if (modelChange.MODIFY_TIME == listEntityPass[i].MODIFY_TIME)//时间为被同步的时间 不处理
|
||
continue;
|
||
listLog.Add(GetLog(LOG_TYPE, ORG_ID, USER_ID, modelChange.NAME + " => " + listEntityPass[i].NAME, listEntityPass[i].CODE));
|
||
}
|
||
|
||
modelChange.NAME = listEntityPass[i].NAME;
|
||
modelChange.STATUS = listEntityPass[i].STATUS;
|
||
modelChange.MODIFY_TIME = listEntityPass[i].MODIFY_TIME;
|
||
listPostUpdate.Add(modelChange);
|
||
}
|
||
|
||
if (listPostUpdate != null && listPostUpdate.Count() > 0)
|
||
{
|
||
try
|
||
{
|
||
this.UnifiedCommit(() =>
|
||
{
|
||
BantchSaveEntityNoCommit(listPostUpdate);
|
||
|
||
if (listLog != null && listLog.Any())//日志
|
||
BantchSaveEntityNoCommit(listLog);
|
||
});
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Msg = ex.Message;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 同步组织
|
||
/// </summary>
|
||
/// <param name="listEntityPass"></param>
|
||
/// <param name="ORG_ID"></param>
|
||
/// <param name="LOG_TYPE"></param>
|
||
/// <param name="USER_ID"></param>
|
||
/// <param name="Msg"></param>
|
||
/// <returns></returns>
|
||
private bool SyncDepartment(List<T_FM_DEPARTMENT> listEntityPass, Guid ORG_ID, int LOG_TYPE, Guid USER_ID, ref string Msg)
|
||
{
|
||
//根据CODE 做相同做更新
|
||
var listCode = listEntityPass.Select(e => e.CODE).ToList();
|
||
listCode.AddRange(listEntityPass.Where(e => e.PARENT_CODE != null && e.PARENT_CODE.Length > 0).Select(e => e.PARENT_CODE));
|
||
listCode = listCode.Distinct().ToList();
|
||
var listCodeSYNC = GetEntities<T_FM_DEPARTMENT>(e => listCode.Contains(e.CODE), null, null);
|
||
|
||
listEntityPass = listEntityPass.OrderByDescending(e => e.MODIFY_TIME).ToList();
|
||
int Count = listEntityPass.Count;
|
||
T_FM_DEPARTMENT modelChange = null;
|
||
T_FM_DEPARTMENT modelChangeP = null;
|
||
List<T_FM_DEPARTMENT> listPostUpdate = new List<T_FM_DEPARTMENT>();
|
||
List<T_PF_SYS_LOG> listLog = new List<T_PF_SYS_LOG>();
|
||
|
||
for (int i = 0; i < Count; i++)
|
||
{
|
||
if (i > 0 && listEntityPass[i].CODE == listEntityPass[i - 1].CODE)
|
||
continue;//修改 按时间倒序排 如果编号与上一个相同 直接过
|
||
modelChange = listCodeSYNC.FirstOrDefault(e => e.CODE == listEntityPass[i].CODE);
|
||
|
||
if (modelChange == null)
|
||
{
|
||
listLog.Add(GetLog(LOG_TYPE, ORG_ID, USER_ID, "新增岗位" + listEntityPass[i].NAME, listEntityPass[i].CODE));
|
||
|
||
modelChange = new T_FM_DEPARTMENT();
|
||
modelChange.ID = Guid.NewGuid();
|
||
modelChange.ORG_ID = ORG_ID;
|
||
modelChange.CODE = listEntityPass[i].CODE;
|
||
}
|
||
else
|
||
{
|
||
if (modelChange.MODIFY_TIME == listEntityPass[i].MODIFY_TIME)//时间为被同步的时间 不处理
|
||
continue;
|
||
listLog.Add(GetLog(LOG_TYPE, ORG_ID, USER_ID, modelChange.NAME + " => " + listEntityPass[i].NAME, listEntityPass[i].CODE));
|
||
}
|
||
modelChange.NAME = listEntityPass[i].NAME;
|
||
modelChange.ENABLE_STATUS = listEntityPass[i].ENABLE_STATUS;
|
||
|
||
if (!string.IsNullOrEmpty(listEntityPass[i].PARENT_CODE))
|
||
{
|
||
modelChangeP = listCodeSYNC.FirstOrDefault(e => e.CODE == listEntityPass[i].PARENT_CODE);
|
||
if (modelChangeP != null && modelChange.PARENT_ID != modelChangeP.ID)
|
||
{
|
||
modelChange.PARENT_ID = modelChangeP.ID;
|
||
}
|
||
}
|
||
//else
|
||
//{
|
||
// 不要了,万一入参有问题 导致数据丢失了
|
||
// modelChange.PARENT_ID = null;
|
||
//}
|
||
if (listEntityPass[i].NUM != 0)
|
||
modelChange.NUM = listEntityPass[i].NUM;
|
||
//modelChange.PARENT_CODE = listEntityPass[i].PARENT_CODE;//暂时不用
|
||
//modelChange.DEPARTMENT_TYPE = listEntityPass[i].DEPARTMENT_TYPE;
|
||
modelChange.MODIFY_TIME = listEntityPass[i].MODIFY_TIME;
|
||
listPostUpdate.Add(modelChange);
|
||
}
|
||
|
||
if (listPostUpdate != null && listPostUpdate.Count() > 0)
|
||
{
|
||
try
|
||
{
|
||
this.UnifiedCommit(() =>
|
||
{
|
||
BantchSaveEntityNoCommit(listPostUpdate);
|
||
|
||
if (listLog != null && listLog.Any())//日志
|
||
BantchSaveEntityNoCommit(listLog);
|
||
});
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Msg = ex.Message;
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 同步用户
|
||
/// </summary>
|
||
/// <param name="listEntityPass"></param>
|
||
/// <param name="ORG_ID"></param>
|
||
/// <param name="LOG_TYPE"></param>
|
||
/// <param name="USER_ID"></param>
|
||
/// <param name="Tenant"></param>
|
||
/// <param name="Msg"></param>
|
||
/// <returns></returns>
|
||
private bool SyncUser(List<T_FM_USER> listEntityPass, Guid ORG_ID, int LOG_TYPE, Guid USER_ID, string Tenant, ref string Msg)
|
||
{
|
||
//工号唯一
|
||
//特殊处理 T_FM_SYNC_USER_RULE 用户 组织 按此配置 否则 取同步数据
|
||
listEntityPass = listEntityPass.OrderByDescending(e => e.MODIFY_TIME).ToList();
|
||
var listCODE = listEntityPass.Select(e => e.CODE);
|
||
var listUserRules = GetEntities<T_FM_SYNC_USER_RULE>(e => !e.IS_DELETED && e.DEPARTMENT_ID != Guid.Empty, null, null);
|
||
var listPOSTCODE = listEntityPass.Select(e => e.POST_CODE);
|
||
var listUserPOST = GetEntities<T_FM_USER_POST>(e => listPOSTCODE.Contains(e.CODE), null, null);
|
||
T_FM_USER_POST modelPost = null;
|
||
|
||
var listDEPARTMENTCODE = listEntityPass.Select(e => e.DEPARTMENT_CODE);
|
||
var listDep = GetEntities<T_FM_USER_POST>(e => listDEPARTMENTCODE.Contains(e.CODE), null, null);
|
||
T_FM_USER_POST modelDep = null;
|
||
|
||
|
||
T_FM_SYNC_USER_RULE modelUserRule = null;
|
||
var listUser = GetEntities<T_FM_USER>(e => listCODE.Contains(e.CODE), null, null);
|
||
|
||
//if (listUserRules != null && listUserRules.Any())
|
||
//{
|
||
var listPersonID = listUser.Where(e => e.PERSON_ID.HasValue).Select(e => e.PERSON_ID);
|
||
IEnumerable<T_FM_PERSON> listPerson = GetEntities<T_FM_PERSON>(e => listPersonID.Contains(e.ID), null, null);
|
||
//}
|
||
//T_OP_ALLUSER mh_ops ops PHONE
|
||
|
||
int Count = listEntityPass.Count;
|
||
T_FM_USER modelChange = null;
|
||
T_FM_PERSON modelPersonChange = null;
|
||
List<T_FM_USER> listUserUpdate = new List<T_FM_USER>();
|
||
List<T_FM_PERSON> listPersonUpdate = new List<T_FM_PERSON>();
|
||
List<T_OP_ALLUSER> listUserALLUpdate = new List<T_OP_ALLUSER>();//手机号码改了 要修改 新增人员要修改
|
||
T_OP_ALLUSER modelAllUser = null;
|
||
|
||
List<T_PF_SYS_LOG> listLog = new List<T_PF_SYS_LOG>();
|
||
|
||
List<T_FM_PERSON_WORK> Nav_Works = new List<T_FM_PERSON_WORK>();// 工作经历
|
||
List<T_FM_PERSON_SKILLS> Nav_Skills = new List<T_FM_PERSON_SKILLS>();// 技能等级
|
||
|
||
for (int i = 0; i < Count; i++)
|
||
{
|
||
if (i > 0 && listEntityPass[i].CODE == listEntityPass[i - 1].CODE)
|
||
continue;
|
||
modelChange = listUser.FirstOrDefault(e => e.CODE == listEntityPass[i].CODE);
|
||
modelAllUser = null;
|
||
if (modelChange == null)
|
||
{
|
||
//新增用户
|
||
listLog.Add(GetLog(LOG_TYPE, ORG_ID, USER_ID, "新增用户" + modelChange.NAME, listEntityPass[i].CODE));
|
||
|
||
#region 基础数据完善
|
||
|
||
modelChange = new T_FM_USER();
|
||
modelChange.ID = Guid.NewGuid();
|
||
modelChange.ORG_ID = ORG_ID;
|
||
|
||
modelAllUser = new T_OP_ALLUSER();
|
||
modelAllUser.ID = Guid.NewGuid();
|
||
modelAllUser.ORG_ID = ORG_ID;
|
||
modelAllUser.CODE = listEntityPass[i].CODE;
|
||
modelAllUser.PHONE = listEntityPass[i].PHONE;
|
||
|
||
modelPersonChange = new T_FM_PERSON();
|
||
modelPersonChange.ID = Guid.NewGuid();
|
||
modelPersonChange.ORG_ID = ORG_ID;
|
||
|
||
#endregion
|
||
}
|
||
else
|
||
{
|
||
if (modelChange.MODIFY_TIME == listEntityPass[i].MODIFY_TIME)//时间为被同步的时间 不处理
|
||
continue;
|
||
//修改用户
|
||
listLog.Add(GetLog(LOG_TYPE, ORG_ID, USER_ID, modelChange.NAME + " => " + listEntityPass[i].NAME, listEntityPass[i].CODE));
|
||
|
||
modelPersonChange = listPerson.FirstOrDefault(e => e.ID == modelChange.PERSON_ID.Value);
|
||
|
||
}
|
||
|
||
#region 人员组织 可能有 特殊配置取值
|
||
|
||
modelUserRule = listUserRules.FirstOrDefault(e => e.USER_ID == modelChange.ID);
|
||
if (modelUserRule != null)
|
||
{
|
||
modelChange.DEPARTMENT_ID = modelUserRule.DEPARTMENT_ID;
|
||
}
|
||
else
|
||
{
|
||
modelDep = listDep.FirstOrDefault(e => e.CODE == listEntityPass[i].DEPARTMENT_CODE);
|
||
if (modelDep != null && modelDep.ID != modelChange.DEPARTMENT_ID)
|
||
modelChange.DEPARTMENT_ID = modelDep.ID;
|
||
}
|
||
#endregion
|
||
|
||
#region model 属性同步
|
||
|
||
if (modelChange.PHONE != listEntityPass[i].PHONE)
|
||
{
|
||
//modelAllUser= //获取全局用户信息
|
||
modelAllUser = new T_OP_ALLUSER();
|
||
modelAllUser.PHONE = listEntityPass[i].PHONE;
|
||
modelAllUser.CODE = listEntityPass[i].CODE;
|
||
}
|
||
|
||
modelChange.CODE = listEntityPass[i].CODE;
|
||
//POST_CODE
|
||
modelChange.NAME = listEntityPass[i].NAME;
|
||
modelChange.PHONE = listEntityPass[i].PHONE;
|
||
modelChange.SEX = listEntityPass[i].SEX;
|
||
modelChange.ID_CARD = listEntityPass[i].ID_CARD;
|
||
modelChange.ENTRYTIME = listEntityPass[i].ENTRYTIME;
|
||
modelChange.ENABLE_STATUS = listEntityPass[i].ENABLE_STATUS;
|
||
|
||
if (modelPersonChange != null)
|
||
{
|
||
modelPersonChange.CODE = listEntityPass[i].CODE;
|
||
modelPersonChange.NAME = listEntityPass[i].NAME;
|
||
modelPersonChange.SEX = listEntityPass[i].SEX;
|
||
modelPersonChange.NATIONALITY = listEntityPass[i].NATIONALITY;
|
||
modelPersonChange.BIRTHDAY = listEntityPass[i].BIRTHDAY;
|
||
modelPersonChange.POLITICALSTATUE = listEntityPass[i].POLITICALSTATUE;
|
||
modelPersonChange.JOBTITLE = listEntityPass[i].JOBTITLE;
|
||
modelPersonChange.CULTURALLEVEL = listEntityPass[i].CULTURALLEVEL;
|
||
modelPersonChange.WORKDATE = listEntityPass[i].WORKDATE;
|
||
|
||
modelPost = listUserPOST.FirstOrDefault(e => e.CODE == listEntityPass[i].POST_CODE);
|
||
if (modelPost != null && modelPost.ID != modelPersonChange.POST_ID)
|
||
{
|
||
modelPersonChange.POST_ID = modelPost.ID;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 人员信息子表 工作经历 技能等级
|
||
|
||
//工作经历
|
||
if (listEntityPass[i].Nav_Works != null && listEntityPass[i].Nav_Works.Count() > 0)
|
||
{
|
||
foreach (var item in listEntityPass[i].Nav_Works)
|
||
{
|
||
Nav_Works.Add(new T_FM_PERSON_WORK()
|
||
{
|
||
ID = Guid.NewGuid(),
|
||
ORG_ID = ORG_ID,
|
||
MODIFY_TIME = listEntityPass[i].MODIFY_TIME,
|
||
PERSON_ID = modelPersonChange.ID,
|
||
STARTDATE = item.STARTDATE,
|
||
ENDDATE = item.ENDDATE,
|
||
WORKPLACE = item.WORKPLACE,
|
||
POSTNAME = item.POSTNAME,
|
||
NUM = item.NUM,
|
||
});
|
||
}
|
||
}
|
||
//技能等级
|
||
if (listEntityPass[i].Nav_Skills != null && listEntityPass[i].Nav_Skills.Count() > 0)
|
||
{
|
||
foreach (var item in listEntityPass[i].Nav_Skills)
|
||
{
|
||
Nav_Skills.Add(new T_FM_PERSON_SKILLS()
|
||
{
|
||
ID = Guid.NewGuid(),
|
||
ORG_ID = ORG_ID,
|
||
MODIFY_TIME = listEntityPass[i].MODIFY_TIME,
|
||
PERSON_ID = modelPersonChange.ID,
|
||
NAME = item.NAME,
|
||
LEVEL = item.LEVEL,
|
||
NUM = item.NUM,
|
||
});
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
modelChange.MODIFY_TIME = listEntityPass[i].MODIFY_TIME;
|
||
listUserUpdate.Add(modelChange);
|
||
|
||
//人员信息
|
||
modelPersonChange.MODIFY_TIME = listEntityPass[i].MODIFY_TIME;
|
||
listPersonUpdate.Add(modelPersonChange);
|
||
|
||
//全局登录信息
|
||
if (modelAllUser != null)
|
||
{
|
||
listUserALLUpdate.Add(modelAllUser);
|
||
}
|
||
}
|
||
|
||
#region 数据信息更新
|
||
|
||
if (listUserUpdate != null && listUserUpdate.Count() > 0)
|
||
{
|
||
try
|
||
{
|
||
this.UnifiedCommit(() =>
|
||
{
|
||
BantchSaveEntityNoCommit(listUserUpdate);//用户信息更新
|
||
if (listPersonUpdate != null && listPersonUpdate.Any())//人员信息更新
|
||
BantchSaveEntityNoCommit(listPersonUpdate);
|
||
if (Nav_Works != null && Nav_Works.Any())//工作经历
|
||
BantchSaveEntityNoCommit(Nav_Works);
|
||
if (Nav_Skills != null && Nav_Skills.Any())//工作技能
|
||
BantchSaveEntityNoCommit(Nav_Skills);
|
||
if (listLog != null && listLog.Any())//日志
|
||
BantchSaveEntityNoCommit(listLog);
|
||
});
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Msg = ex.Message;
|
||
return false;
|
||
}
|
||
|
||
#region 登录信息 更新 mh_ops
|
||
|
||
if (listUserALLUpdate != null && listUserALLUpdate.Count() > 0)
|
||
{
|
||
try
|
||
{
|
||
List<T_OP_ALLUSER> listAllUserResult = new List<T_OP_ALLUSER>();
|
||
using (var context = new MigrationContext(ConfigurationManager.ConnectionStrings["default"]))
|
||
{
|
||
var ListCode = listUserALLUpdate.Where(e => e.ID == Guid.Empty).Select(e => e.CODE);
|
||
IEnumerable<T_OP_ALLUSER> listAllUser = null;
|
||
if (ListCode != null && ListCode.Any())
|
||
{
|
||
listAllUser = context.GetEntities<T_OP_ALLUSER>(e => ListCode.Contains(e.CODE), null, null);
|
||
|
||
foreach (var item in listUserALLUpdate)
|
||
{
|
||
if (item.ID == Guid.Empty)
|
||
{
|
||
modelAllUser = listAllUser.FirstOrDefault(e => e.CODE == item.CODE);//编号为唯一标识符
|
||
if (modelAllUser != null)
|
||
{
|
||
modelAllUser.TENANT = Tenant;
|
||
modelAllUser.ORG_ID = ORG_ID;
|
||
modelAllUser.PHONE = item.PHONE;//只更新手机号码
|
||
modelAllUser.MODIFY_TIME = item.MODIFY_TIME;
|
||
}
|
||
listAllUserResult.Add(item);
|
||
}
|
||
else
|
||
{
|
||
listAllUserResult.Add(item);
|
||
}
|
||
}
|
||
}
|
||
context.UpdateRange(listAllUserResult);
|
||
context.SaveChanges();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Msg = ex.Message;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
}
|
||
#endregion
|
||
|
||
return true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 日志
|
||
/// </summary>
|
||
/// <param name="LOG_TYPE"></param>
|
||
/// <param name="ORG_ID"></param>
|
||
/// <param name="USER_ID"></param>
|
||
/// <param name="LOG_DATA"></param>
|
||
/// <returns></returns>
|
||
private T_PF_SYS_LOG GetLog(int LOG_TYPE, Guid ORG_ID, Guid USER_ID, string LOG_DATA, string EXT_DATA)
|
||
{
|
||
T_PF_SYS_LOG modelLog = new T_PF_SYS_LOG();
|
||
modelLog.ID = Guid.NewGuid();
|
||
modelLog.ORG_ID = ORG_ID;
|
||
modelLog.LOG_TYPE = LOG_TYPE;
|
||
modelLog.USER_ID = USER_ID;
|
||
modelLog.LOG_DATA = LOG_DATA;
|
||
modelLog.EXT_DATA = EXT_DATA;
|
||
modelLog.LOG_TIME = DateTime.Now;
|
||
modelLog.LOG_TITLE = "数据同步日志";
|
||
return modelLog;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 数据同步实体
|
||
/// </summary>
|
||
public class ListDate
|
||
{
|
||
/// <summary>
|
||
/// 公司ID
|
||
/// </summary>
|
||
public Guid ORG_ID { get; set; }
|
||
|
||
/// <summary>
|
||
/// 同步参数备用字段
|
||
/// </summary>
|
||
public string PARAMETER { get; set; }
|
||
|
||
/// <summary>
|
||
/// 岗位信息
|
||
/// </summary>
|
||
public List<T_FM_USER_POST> listPost { get; set; }
|
||
/// <summary>
|
||
/// 部门信息
|
||
/// </summary>
|
||
public List<T_FM_DEPARTMENT> listDepartment { get; set; }
|
||
/// <summary>
|
||
/// 用户信息
|
||
/// </summary>
|
||
public List<T_FM_USER> listUser { get; set; }
|
||
|
||
}
|
||
}
|