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_jy_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_jy_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; }
 | 
						||
 | 
						||
    }
 | 
						||
}
 |