574 lines
25 KiB
C#
574 lines
25 KiB
C#
|
|
using Newtonsoft.Json.Linq;
|
||
|
|
using System;
|
||
|
|
using System.Collections;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Linq;
|
||
|
|
using System.Configuration;
|
||
|
|
using System.IO;
|
||
|
|
using System.Net.Http;
|
||
|
|
using System.Threading.Tasks;
|
||
|
|
using Model;
|
||
|
|
using Newtonsoft.Json;
|
||
|
|
using RestSharp;
|
||
|
|
using System.Net;
|
||
|
|
|
||
|
|
namespace BLL;
|
||
|
|
|
||
|
|
public class APIPersonSyncService
|
||
|
|
{
|
||
|
|
#region 根据项目、单位获取人员列表分页
|
||
|
|
|
||
|
|
public static List<Model.PersonSyncItem> GetPersonLitsByProjectIdAndUnitId(string projectId, string unitId,
|
||
|
|
string dataId = "")
|
||
|
|
{
|
||
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
|
|
{
|
||
|
|
var list = from x in db.SitePerson_Person where x.ProjectId == projectId select x;
|
||
|
|
if (!string.IsNullOrEmpty(unitId))
|
||
|
|
{
|
||
|
|
list = list.Where(x => x.UnitId == unitId);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!string.IsNullOrEmpty(dataId))
|
||
|
|
{
|
||
|
|
list = list.Where(x => x.PersonId == dataId);
|
||
|
|
}
|
||
|
|
|
||
|
|
var personList = (from x in list
|
||
|
|
join wp in db.Base_WorkPost on x.WorkPostId equals wp.WorkPostId into wpTemp
|
||
|
|
from wp in wpTemp.DefaultIfEmpty()
|
||
|
|
join tg in db.ProjectData_TeamGroup on x.TeamGroupId equals tg.TeamGroupId into tgTemp
|
||
|
|
from tg in tgTemp.DefaultIfEmpty()
|
||
|
|
join c in db.Base_Certificate on x.CertificateId equals c.CertificateId into cTemp
|
||
|
|
from c in cTemp.DefaultIfEmpty()
|
||
|
|
join att1 in db.AttachFile on (x.PersonId + "#1") equals att1.ToKeyId into att1Temp
|
||
|
|
from att1 in att1Temp.DefaultIfEmpty()
|
||
|
|
join att2 in db.AttachFile on (x.PersonId + "#2") equals att2.ToKeyId into att2Temp
|
||
|
|
from att2 in att2Temp.DefaultIfEmpty()
|
||
|
|
join att3 in db.AttachFile on (x.PersonId + "#3") equals att3.ToKeyId into att3Temp
|
||
|
|
from att3 in att3Temp.DefaultIfEmpty()
|
||
|
|
join att4 in db.AttachFile on (x.PersonId + "#4") equals att4.ToKeyId into att4Temp
|
||
|
|
from att4 in att4Temp.DefaultIfEmpty()
|
||
|
|
join att5 in db.AttachFile on (x.PersonId + "#5") equals att5.ToKeyId into att5Temp
|
||
|
|
from att5 in att5Temp.DefaultIfEmpty()
|
||
|
|
select new Model.PersonSyncItem
|
||
|
|
{
|
||
|
|
PersonId = x.PersonId,
|
||
|
|
CardNo = x.CardNo,
|
||
|
|
PersonName = x.PersonName,
|
||
|
|
Sex = x.Sex,
|
||
|
|
IdentityCard = x.IdentityCard,
|
||
|
|
Address = x.Address,
|
||
|
|
ProjectId = x.ProjectId,
|
||
|
|
UnitId = x.UnitId,
|
||
|
|
TeamGroupId = x.TeamGroupId,
|
||
|
|
WorkAreaId = x.WorkAreaId,
|
||
|
|
WorkPostId = x.WorkPostId,
|
||
|
|
InTime = x.InTime,
|
||
|
|
OutTime = x.OutTime,
|
||
|
|
OutResult = x.OutResult,
|
||
|
|
Telephone = x.Telephone,
|
||
|
|
// x.PositionId,//职务
|
||
|
|
// x.PostTitleId,//职称
|
||
|
|
PhotoUrl = x.PhotoUrl,
|
||
|
|
IsUsed = x.IsUsed,
|
||
|
|
IsCardUsed = x.IsCardUsed,
|
||
|
|
PersonIndex = x.PersonIndex,
|
||
|
|
// x.DepartId,//部门
|
||
|
|
CertificateId = x.CertificateId,
|
||
|
|
CertificateItem = APIDataShareSyncService.GetPersonQualityByPersonId(x.PersonId), //特岗证书
|
||
|
|
CertificateCode = x.CertificateCode,
|
||
|
|
CertificateName = c.CertificateName,
|
||
|
|
CertificateLimitTime = x.CertificateLimitTime,
|
||
|
|
QualificationCertificateUrl = x.QualificationCertificateUrl,
|
||
|
|
TrainingCertificateUrl = x.TrainingCertificateUrl,
|
||
|
|
QRCodeAttachUrl = x.QRCodeAttachUrl,
|
||
|
|
Password = x.Password,
|
||
|
|
FromPersonId = x.FromPersonId,
|
||
|
|
// x.AuditorId,审核人
|
||
|
|
AuditorDate = x.AuditorDate,
|
||
|
|
ExchangeTime = x.ExchangeTime,
|
||
|
|
ExchangeTime2 = x.ExchangeTime2,
|
||
|
|
IDCardUrl = x.IDCardUrl,
|
||
|
|
IsForeign = x.IsForeign,
|
||
|
|
IsOutside = x.IsOutside,
|
||
|
|
EduLevel = x.EduLevel,
|
||
|
|
MaritalStatus = x.MaritalStatus,
|
||
|
|
Isprint = x.Isprint,
|
||
|
|
MainCNProfessionalId = x.MainCNProfessionalId,
|
||
|
|
ViceCNProfessionalId = x.ViceCNProfessionalId,
|
||
|
|
Birthday = x.Birthday,
|
||
|
|
IdcardType = x.IdcardType,
|
||
|
|
IdcardStartDate = x.IdcardStartDate,
|
||
|
|
IdcardEndDate = x.IdcardEndDate,
|
||
|
|
IdcardForever = x.IdcardForever,
|
||
|
|
PoliticsStatus = x.PoliticsStatus,
|
||
|
|
IdcardAddress = x.IdcardAddress,
|
||
|
|
Nation = x.Nation,
|
||
|
|
CountryCode = x.CountryCode,
|
||
|
|
IsSafetyMonitoring = x.IsSafetyMonitoring,
|
||
|
|
ProvinceCode = x.ProvinceCode,
|
||
|
|
IsCardNoOK = x.IsCardNoOK,
|
||
|
|
// AttachUrl1 = AttachFileService.getFileUrl(x.PersonId + "#1"),
|
||
|
|
// AttachUrl2 = AttachFileService.getFileUrl(x.PersonId + "#2"),
|
||
|
|
// AttachUrl3 = AttachFileService.getFileUrl(x.PersonId + "#3"),
|
||
|
|
// AttachUrl4 = AttachFileService.getFileUrl(x.PersonId + "#4"),
|
||
|
|
// AttachUrl5 = AttachFileService.getFileUrl(x.PersonId + "#5"),
|
||
|
|
AttachUrl1 = att1.AttachUrl,
|
||
|
|
AttachUrl2 = att2.AttachUrl,
|
||
|
|
AttachUrl3 = att3.AttachUrl,
|
||
|
|
AttachUrl4 = att4.AttachUrl,
|
||
|
|
AttachUrl5 = att5.AttachUrl,
|
||
|
|
WorkPostName = wp.WorkPostName, //岗位名称
|
||
|
|
PostType = wp.PostType, //岗位诶类型
|
||
|
|
IsHsse = wp.IsHsse, //岗位是否是安管人员
|
||
|
|
IsCQMS = wp.IsCQMS, //岗位是否是质量管理
|
||
|
|
TeamGroupName = tg.TeamGroupName,
|
||
|
|
WorkAreaName = APIDataShareSyncService.GetWorkAreaNames(x.WorkAreaId, projectId)
|
||
|
|
}).ToList();
|
||
|
|
|
||
|
|
return personList;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#endregion
|
||
|
|
|
||
|
|
#region 拉取项目人员数据
|
||
|
|
|
||
|
|
public static async Task<string> getPersonLists()
|
||
|
|
{
|
||
|
|
int code = 0;
|
||
|
|
string message = "";
|
||
|
|
try
|
||
|
|
{
|
||
|
|
string CollCropCode = string.Empty;
|
||
|
|
string unitId = string.Empty;
|
||
|
|
var thisUnit = CommonService.GetIsThisUnit(); //当前单位
|
||
|
|
if (thisUnit != null)
|
||
|
|
{
|
||
|
|
CollCropCode = thisUnit.CollCropCode; //社会统一信用代码
|
||
|
|
unitId = thisUnit.UnitId;
|
||
|
|
}
|
||
|
|
|
||
|
|
var ProjectList = (from x in Funs.DB.Base_Project
|
||
|
|
where (x.IsDelete == null || x.IsDelete == false) && x.SubjectUnit != null &&
|
||
|
|
x.SubjectProject != null
|
||
|
|
select x).ToList();
|
||
|
|
if (ProjectList.Count > 0)
|
||
|
|
{
|
||
|
|
foreach (var project in ProjectList)
|
||
|
|
{
|
||
|
|
string SubjectUnitId = project.SubjectUnit; //集团的单位id
|
||
|
|
string SubjectProjectId = project.SubjectProject; //集团的单位id
|
||
|
|
//获取对应单位的apiurl地址
|
||
|
|
var Url = BLL.UnitService.getUnitApiUrlByUnitId(SubjectUnitId);
|
||
|
|
var ApiUrl = "";
|
||
|
|
var WebUrl = "";
|
||
|
|
if (!string.IsNullOrEmpty(Url))
|
||
|
|
{
|
||
|
|
var urls = Url.Split(',');
|
||
|
|
ApiUrl = urls[0];
|
||
|
|
if (urls.Length > 1)
|
||
|
|
{
|
||
|
|
WebUrl = urls[1];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// CollCropCode = "913404001520228377Y";//测试使用
|
||
|
|
// SubjectProjectId = "B409A8D7-48C7-486E-84C7-E3E7B2C0E5B7";//测试使用
|
||
|
|
// unitId = "aaa9e72b-e3a6-441e-a7bb-afc008adebc9";//测试使用
|
||
|
|
|
||
|
|
string url = "/api/PersonSync/getPersonListByProjectIdAndCollCropCode?projectId=" +
|
||
|
|
SubjectProjectId + "&collCropCode=" + CollCropCode;
|
||
|
|
string baseurl = ApiUrl + url;
|
||
|
|
|
||
|
|
string contenttype = "application/json;charset=unicode";
|
||
|
|
var strJosn = "";
|
||
|
|
using (HttpClient client = new HttpClient())
|
||
|
|
{
|
||
|
|
client.Timeout = TimeSpan.FromMinutes(5); // 设置超时时间为5分钟
|
||
|
|
client.DefaultRequestHeaders.Add("token",
|
||
|
|
"AF17168B-87BD-4GLY-1111-F0A0A1158F9B"); // 前提是所有二级单位都有sysGLY账号且id是AF17168B-87BD-4GLY-1111-F0A0A1158F9B可作为token
|
||
|
|
strJosn = await client.GetStringAsync(baseurl);
|
||
|
|
}
|
||
|
|
// var strJosn = APIGetHttpService.Http(baseurl, "GET", contenttype, null, null);
|
||
|
|
if (!string.IsNullOrEmpty(strJosn))
|
||
|
|
{
|
||
|
|
JObject obj = JObject.Parse(strJosn);
|
||
|
|
code = Funs.GetNewIntOrZero(obj["code"].ToString());
|
||
|
|
message = obj["message"].ToString();
|
||
|
|
if (code == 1)
|
||
|
|
{
|
||
|
|
var getData =
|
||
|
|
JsonConvert.DeserializeObject<List<PersonSyncItem>>(obj["data"].ToString());
|
||
|
|
if (getData.Count() > 0)
|
||
|
|
{
|
||
|
|
ProcessPersonData(getData, project.ProjectId, unitId, WebUrl);
|
||
|
|
}
|
||
|
|
|
||
|
|
message = "获取成功:同步人员数" + getData.Count().ToString() + "条";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
message = "获取失败:" + ex.Message;
|
||
|
|
ErrLogInfo.WriteLog("人员获取!", ex);
|
||
|
|
}
|
||
|
|
|
||
|
|
return message;
|
||
|
|
}
|
||
|
|
|
||
|
|
#endregion
|
||
|
|
|
||
|
|
#region 推送人员数据
|
||
|
|
|
||
|
|
public static ReturnData pushPersonLists(string projectId, string dataId)
|
||
|
|
{
|
||
|
|
Model.ReturnData responeData = new Model.ReturnData();
|
||
|
|
responeData.code = 0;
|
||
|
|
responeData.message = string.Empty;
|
||
|
|
try
|
||
|
|
{
|
||
|
|
var project = Funs.DB.Base_Project.FirstOrDefault(x => x.ProjectId == projectId);
|
||
|
|
if (project != null)
|
||
|
|
{
|
||
|
|
//获取人员数据
|
||
|
|
var items = GetPersonLitsByProjectIdAndUnitId(projectId, "", dataId);
|
||
|
|
//总包地址推送
|
||
|
|
if (items.Count() > 0)
|
||
|
|
{
|
||
|
|
var thisUnit = CommonService.GetIsThisUnit(); //当前单位
|
||
|
|
var apiurl = "/api/PersonSync/SavePersonSyncData";
|
||
|
|
//总包单位接口地址
|
||
|
|
var Url = BLL.UnitService.getUnitApiUrlByUnitId(project.SubjectUnit);
|
||
|
|
var ApiUrl = "";
|
||
|
|
var WebUrl = "";
|
||
|
|
if (!string.IsNullOrEmpty(Url))
|
||
|
|
{
|
||
|
|
var urls = Url.Split(',');
|
||
|
|
ApiUrl = urls[0];
|
||
|
|
if (urls.Length > 1)
|
||
|
|
{
|
||
|
|
WebUrl = urls[1];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// thisUnit.CollCropCode = "913404001520228377Y"; //分包单位社会统一信用码 测试使用
|
||
|
|
// project.SubjectProject = "B409A8D7-48C7-486E-84C7-E3E7B2C0E5B7";//测试使用
|
||
|
|
|
||
|
|
var pushData = new PersonSyncData
|
||
|
|
{
|
||
|
|
CollCropCode = thisUnit.CollCropCode, //分包单位社会统一信用码
|
||
|
|
ProjectId = project.SubjectProject, //主包项目Id
|
||
|
|
UnitDomain = Funs.SGGLUrl, //分包单位域名地址【文件存储地址】
|
||
|
|
Items = items //人员数据
|
||
|
|
};
|
||
|
|
var pushContent = JsonConvert.SerializeObject(pushData);
|
||
|
|
string baseurl = ApiUrl + apiurl;
|
||
|
|
string contenttype = "application/json;charset=unicode";
|
||
|
|
var returndata = APIGetHttpService.Http(baseurl, "Post", contenttype, null, pushContent);
|
||
|
|
if (!string.IsNullOrEmpty(returndata))
|
||
|
|
{
|
||
|
|
JObject obj = JObject.Parse(returndata);
|
||
|
|
string code = obj["code"].ToString();
|
||
|
|
string message = obj["message"].ToString();
|
||
|
|
responeData.code = int.Parse(code);
|
||
|
|
responeData.message = message;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
responeData.code = 0;
|
||
|
|
responeData.message = "当前没有项目人员数据";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
responeData.message = "同步到总包单位失败!";
|
||
|
|
ErrLogInfo.WriteLog("【项目人员】同步到总包单位失败!", ex);
|
||
|
|
}
|
||
|
|
|
||
|
|
return responeData;
|
||
|
|
}
|
||
|
|
|
||
|
|
#endregion
|
||
|
|
|
||
|
|
#region 接收保存项目人员数据
|
||
|
|
|
||
|
|
public static async Task<string> SavePersonSyncData(Model.PersonSyncData items)
|
||
|
|
{
|
||
|
|
int code = 0;
|
||
|
|
string message = "";
|
||
|
|
try
|
||
|
|
{
|
||
|
|
if (items.Items.Count > 0)
|
||
|
|
{
|
||
|
|
//获取分包单位CollCropCode
|
||
|
|
var CollCropCode = items.CollCropCode;
|
||
|
|
var ProjectId = items.ProjectId;
|
||
|
|
var UnitDomain = items.UnitDomain; //分包单位域名地址【文件存储地址】
|
||
|
|
//1、判断分包单位是否存在
|
||
|
|
//根据分包单位CollCropCode获取单位id
|
||
|
|
var unit = Funs.DB.Base_Unit.FirstOrDefault(x => x.CollCropCode == CollCropCode);
|
||
|
|
if (unit == null)
|
||
|
|
{
|
||
|
|
message = "总包单位不存在本单位,请登录总包系统检查维护本单位信息!";
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
//2、判断主包项目是否存在
|
||
|
|
var porject = BLL.ProjectService.GetProjectByProjectId(ProjectId);
|
||
|
|
if (porject == null)
|
||
|
|
{
|
||
|
|
message = "总包单位不存在本项目,请检查总包项目关联是否正确!";
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
ProcessPersonData(items.Items, ProjectId, unit.UnitId, UnitDomain);
|
||
|
|
message = "数据推送成功!";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
message = "暂无项目人员数据!";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
throw ex;
|
||
|
|
}
|
||
|
|
|
||
|
|
return message;
|
||
|
|
}
|
||
|
|
|
||
|
|
#endregion
|
||
|
|
|
||
|
|
#region 处理单项目人员数据的新增或更新逻辑
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 处理单项目人员数据的新增或更新逻辑
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="item">人员数据项</param>
|
||
|
|
/// <param name="projectId">项目id</param>
|
||
|
|
/// <param name="unitId">单位ID</param>
|
||
|
|
/// <param name="WebUrl">Web地址</param>
|
||
|
|
private static async void ProcessPersonData(List<Model.PersonSyncItem> getData, string projectId, string unitId,
|
||
|
|
string WebUrl)
|
||
|
|
{
|
||
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
|
|
{
|
||
|
|
foreach (var item in getData)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
string PersonId = item.PersonId;
|
||
|
|
var model = db.SitePerson_Person.FirstOrDefault(e => e.PersonId == PersonId);
|
||
|
|
if (model == null)
|
||
|
|
{
|
||
|
|
Model.SitePerson_Person newModel = new Model.SitePerson_Person
|
||
|
|
{
|
||
|
|
PersonId = item.PersonId,
|
||
|
|
CardNo = item.CardNo,
|
||
|
|
PersonName = item.PersonName,
|
||
|
|
Sex = item.Sex,
|
||
|
|
IdentityCard = item.IdentityCard,
|
||
|
|
Address = item.Address,
|
||
|
|
ProjectId = projectId,
|
||
|
|
UnitId = unitId,
|
||
|
|
TeamGroupId = APIDataShareSyncService.GetTeamGroupId(item.TeamGroupName, projectId, unitId),
|
||
|
|
WorkAreaId = APIDataShareSyncService.getWorkAreaId(item.WorkAreaName, projectId),
|
||
|
|
WorkPostId = APIDataShareSyncService.getWorkPostId(item.WorkPostName, item.PostType,
|
||
|
|
item.IsHsse.ToString(), item.IsCQMS.ToString()),
|
||
|
|
InTime = item.InTime,
|
||
|
|
OutTime = item.OutTime,
|
||
|
|
OutResult = item.OutResult,
|
||
|
|
Telephone = item.Telephone,
|
||
|
|
PhotoUrl = item.PhotoUrl,
|
||
|
|
// 异步安全的头像下载
|
||
|
|
HeadImage = await SafeDownloadHeadImageAsync(WebUrl, item.PhotoUrl),
|
||
|
|
IsUsed = item.IsUsed,
|
||
|
|
IsCardUsed = item.IsCardUsed,
|
||
|
|
PersonIndex = item.PersonIndex,
|
||
|
|
CertificateId = item.CertificateId,
|
||
|
|
CertificateCode = item.CertificateCode,
|
||
|
|
CertificateLimitTime = item.CertificateLimitTime,
|
||
|
|
QualificationCertificateUrl = item.QualificationCertificateUrl,
|
||
|
|
TrainingCertificateUrl = item.TrainingCertificateUrl,
|
||
|
|
QRCodeAttachUrl = item.QRCodeAttachUrl,
|
||
|
|
Password = item.Password,
|
||
|
|
FromPersonId = item.FromPersonId,
|
||
|
|
AuditorDate = item.AuditorDate,
|
||
|
|
ExchangeTime = item.ExchangeTime,
|
||
|
|
ExchangeTime2 = item.ExchangeTime2,
|
||
|
|
IDCardUrl = item.IDCardUrl,
|
||
|
|
IsForeign = item.IsForeign,
|
||
|
|
IsOutside = item.IsOutside,
|
||
|
|
EduLevel = item.EduLevel,
|
||
|
|
MaritalStatus = item.MaritalStatus,
|
||
|
|
Isprint = item.Isprint,
|
||
|
|
MainCNProfessionalId = item.MainCNProfessionalId,
|
||
|
|
ViceCNProfessionalId = item.ViceCNProfessionalId,
|
||
|
|
Birthday = item.Birthday,
|
||
|
|
IdcardType = item.IdcardType,
|
||
|
|
IdcardStartDate = item.IdcardStartDate,
|
||
|
|
IdcardEndDate = item.IdcardEndDate,
|
||
|
|
IdcardForever = item.IdcardForever,
|
||
|
|
PoliticsStatus = item.PoliticsStatus,
|
||
|
|
IdcardAddress = item.IdcardAddress,
|
||
|
|
Nation = item.Nation,
|
||
|
|
CountryCode = item.CountryCode,
|
||
|
|
IsSafetyMonitoring = item.IsSafetyMonitoring,
|
||
|
|
ProvinceCode = item.ProvinceCode,
|
||
|
|
IsCardNoOK = item.IsCardNoOK
|
||
|
|
};
|
||
|
|
|
||
|
|
db.SitePerson_Person.InsertOnSubmit(newModel);
|
||
|
|
db.SubmitChanges();
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
// 更新现有记录
|
||
|
|
UpdatePersonModel(model, item, projectId, unitId, WebUrl);
|
||
|
|
db.SubmitChanges();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
// 异步安全的附件处理
|
||
|
|
await ProcessPersonAttachmentsAsync(WebUrl, item);
|
||
|
|
|
||
|
|
if (item.CertificateItem != null)
|
||
|
|
{
|
||
|
|
APIDataShareSyncService.ProcessPersonQualityData(item.CertificateItem, item.PersonId);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
// 记录异常但不中断整个批处理
|
||
|
|
BLL.ErrLogInfo.WriteLog($"处理人员数据时出错 PersonId: {item?.PersonId}, 错误: {ex.Message}");
|
||
|
|
continue; // 继续处理下一个记录
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 安全的头像下载方法
|
||
|
|
public static async Task<byte[]> SafeDownloadHeadImageAsync(string webUrl, string photoUrl)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
if (string.IsNullOrEmpty(photoUrl))
|
||
|
|
return null;
|
||
|
|
return await APIDataShareSyncService.DownloadHeadImageAsync(webUrl, photoUrl);
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
BLL.ErrLogInfo.WriteLog($"下载头像失败: {photoUrl}, 错误: {ex.Message}");
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 更新人员模型的辅助方法
|
||
|
|
private static void UpdatePersonModel(Model.SitePerson_Person model, PersonSyncItem item, string projectId,
|
||
|
|
string unitId, string webUrl)
|
||
|
|
{
|
||
|
|
model.PersonId = item.PersonId;
|
||
|
|
model.CardNo = item.CardNo;
|
||
|
|
model.PersonName = item.PersonName;
|
||
|
|
model.Sex = item.Sex;
|
||
|
|
model.IdentityCard = item.IdentityCard;
|
||
|
|
model.Address = item.Address;
|
||
|
|
model.ProjectId = projectId;
|
||
|
|
model.UnitId = unitId;
|
||
|
|
model.TeamGroupId = APIDataShareSyncService.GetTeamGroupId(item.TeamGroupName, projectId, unitId);
|
||
|
|
model.WorkAreaId = APIDataShareSyncService.getWorkAreaId(item.WorkAreaName, projectId);
|
||
|
|
model.WorkPostId = APIDataShareSyncService.getWorkPostId(item.WorkPostName, item.PostType,
|
||
|
|
item.IsHsse.ToString(), item.IsCQMS.ToString());
|
||
|
|
model.InTime = item.InTime;
|
||
|
|
model.OutTime = item.OutTime;
|
||
|
|
model.OutResult = item.OutResult;
|
||
|
|
model.Telephone = item.Telephone;
|
||
|
|
model.PhotoUrl = item.PhotoUrl;
|
||
|
|
|
||
|
|
// 异步操作需要特殊处理
|
||
|
|
Task.Run(async () =>
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
model.HeadImage = await APIDataShareSyncService.DownloadHeadImageAsync(webUrl, item.PhotoUrl);
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
BLL.ErrLogInfo.WriteLog($"更新头像失败: {ex.Message}");
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
model.IsUsed = item.IsUsed;
|
||
|
|
model.IsCardUsed = item.IsCardUsed;
|
||
|
|
model.PersonIndex = item.PersonIndex;
|
||
|
|
model.CertificateId = item.CertificateId;
|
||
|
|
model.CertificateCode = item.CertificateCode;
|
||
|
|
model.CertificateLimitTime = item.CertificateLimitTime;
|
||
|
|
model.QualificationCertificateUrl = item.QualificationCertificateUrl;
|
||
|
|
model.TrainingCertificateUrl = item.TrainingCertificateUrl;
|
||
|
|
model.QRCodeAttachUrl = item.QRCodeAttachUrl;
|
||
|
|
model.Password = item.Password;
|
||
|
|
model.FromPersonId = item.FromPersonId;
|
||
|
|
model.AuditorDate = item.AuditorDate;
|
||
|
|
model.ExchangeTime = item.ExchangeTime;
|
||
|
|
model.ExchangeTime2 = item.ExchangeTime2;
|
||
|
|
model.IDCardUrl = item.IDCardUrl;
|
||
|
|
model.IsForeign = item.IsForeign;
|
||
|
|
model.IsOutside = item.IsOutside;
|
||
|
|
model.EduLevel = item.EduLevel;
|
||
|
|
model.MaritalStatus = item.MaritalStatus;
|
||
|
|
model.Isprint = item.Isprint;
|
||
|
|
model.MainCNProfessionalId = item.MainCNProfessionalId;
|
||
|
|
model.ViceCNProfessionalId = item.ViceCNProfessionalId;
|
||
|
|
model.Birthday = item.Birthday;
|
||
|
|
model.IdcardType = item.IdcardType;
|
||
|
|
model.IdcardStartDate = item.IdcardStartDate;
|
||
|
|
model.IdcardEndDate = item.IdcardEndDate;
|
||
|
|
model.IdcardForever = item.IdcardForever;
|
||
|
|
model.PoliticsStatus = item.PoliticsStatus;
|
||
|
|
model.IdcardAddress = item.IdcardAddress;
|
||
|
|
model.Nation = item.Nation;
|
||
|
|
model.CountryCode = item.CountryCode;
|
||
|
|
model.IsSafetyMonitoring = item.IsSafetyMonitoring;
|
||
|
|
model.ProvinceCode = item.ProvinceCode;
|
||
|
|
model.IsCardNoOK = item.IsCardNoOK;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 异步安全的附件处理
|
||
|
|
private static async Task ProcessPersonAttachmentsAsync(string webUrl, PersonSyncItem item)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
var attachmentTasks = new List<Task>
|
||
|
|
{
|
||
|
|
APIDataShareSyncService.OperationAttachFile(webUrl, item.PersonId + "#1", BLL.Const.PersonListMenuId,
|
||
|
|
item.AttachUrl1),
|
||
|
|
APIDataShareSyncService.OperationAttachFile(webUrl, item.PersonId + "#2", BLL.Const.PersonListMenuId,
|
||
|
|
item.AttachUrl2),
|
||
|
|
APIDataShareSyncService.OperationAttachFile(webUrl, item.PersonId + "#3", BLL.Const.PersonListMenuId,
|
||
|
|
item.AttachUrl3),
|
||
|
|
APIDataShareSyncService.OperationAttachFile(webUrl, item.PersonId + "#4", BLL.Const.PersonListMenuId,
|
||
|
|
item.AttachUrl4),
|
||
|
|
APIDataShareSyncService.OperationAttachFile(webUrl, item.PersonId + "#5", BLL.Const.PersonListMenuId,
|
||
|
|
item.AttachUrl5)
|
||
|
|
};
|
||
|
|
|
||
|
|
await Task.WhenAll(attachmentTasks);
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
BLL.ErrLogInfo.WriteLog($"处理人员附件失败 PersonId: {item.PersonId}, 错误: {ex.Message}");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#endregion
|
||
|
|
}
|