This commit is contained in:
2026-03-06 17:58:48 +08:00
parent 393e451064
commit adedb7e83d
102 changed files with 13691 additions and 271 deletions
+10
View File
@@ -276,7 +276,14 @@
<Compile Include="BaseInfo\UnitTypeService.cs" />
<Compile Include="BaseInfo\WorkPostService.cs" />
<Compile Include="BaseInfo\WorkStageService.cs" />
<Compile Include="Common\DataCleanupMergeHelper.cs" />
<Compile Include="CQMS\ProjectHighlightsSite\ProjectHighlightsSiteService.cs" />
<Compile Include="DataShare\APIDataShareSyncService.cs" />
<Compile Include="DataShare\HSSE\APICheckSpecialSyncService.cs" />
<Compile Include="DataShare\HSSE\APIHazardRegisterSyncService.cs" />
<Compile Include="DataShare\HSSE\APILicenseSyncService.cs" />
<Compile Include="DataShare\HSSE\APIMeetingSyncService.cs" />
<Compile Include="DataShare\HSSE\APIPersonSyncService.cs" />
<Compile Include="HJGL\BaseInfo\Base_MaterialColorService.cs" />
<Compile Include="CLGL\TwArrivalStatisticsService.cs" />
<Compile Include="CLGL\TwConst.cs" />
@@ -580,6 +587,7 @@
<Compile Include="HSSE\Solution\ExpertArgumentService.cs" />
<Compile Include="HSSE\Solution\LargerHazardService.cs" />
<Compile Include="HSSE\Solution\SolutionTemplateService.cs" />
<Compile Include="HSSE\Solution\TemporaryElectricityService.cs" />
<Compile Include="HSSE\Technique\EmergencyService.cs" />
<Compile Include="HSSE\Technique\HazardListService.cs" />
<Compile Include="HSSE\Technique\HazardListTypeService.cs" />
@@ -833,6 +841,8 @@
<Compile Include="ZHGL\Supervise\SuperviseCheckRectifyService.cs" />
<Compile Include="ZHGL\Supervise\SuperviseCheckReportItemService.cs" />
<Compile Include="ZHGL\Supervise\SuperviseCheckReportService.cs" />
<Compile Include="ZHGL\Supervise\UnitHazardRegisterItemService.cs" />
<Compile Include="ZHGL\Supervise\UnitHazardRegisterService.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Model\Model.csproj">
@@ -100,5 +100,24 @@ namespace BLL
Funs.FineUIPleaseSelect(dropName);
}
}
/// <summary>
/// 根据检查大类和检查类别代码获取检查类别名称
/// </summary>
/// <param name="checkMainType">检查大类(0=安全,1=质量)</param>
/// <param name="checkTypeCode">检查类别代码</param>
/// <returns>检查类别名称</returns>
public static string GetCheckTypeName(string checkMainType, string checkTypeCode)
{
if (string.IsNullOrEmpty(checkMainType) || string.IsNullOrEmpty(checkTypeCode))
{
return string.Empty;
}
var checkType = Funs.DB.Base_SuperviseCheckType
.FirstOrDefault(x => x.CheckMainType == checkMainType && x.CheckTypeCode == checkTypeCode);
return checkType?.CheckTypeName ?? string.Empty;
}
}
}
+41 -12
View File
@@ -1601,18 +1601,6 @@ namespace BLL
#endregion
#region
/// <summary>
/// 安全监督检查报告
/// </summary>
public const string SuperviseCheckReportMenuId = "40387C48-95A0-435C-82FB-57AF0A81B9D4";
/// <summary>
/// 安全监督检查整改
/// </summary>
public const string SuperviseCheckRectifyMenuId = "55976B16-2C33-406E-B514-2FE42D031071";
#endregion
#region
/// <summary>
/// 企业上报监督检查报告
@@ -3354,6 +3342,10 @@ namespace BLL
/// </summary>
public const string CheckSpecialTemplateUrl = "File\\Excel\\DataIn\\专项检查导入模板.xls";
/// <summary>
/// 专项检查明细导入模板
/// </summary>
public const string CheckSpecialDetailTemplateUrl = "File\\Excel\\DataIn\\专项检查明细导入模板.xls";
/// <summary>
/// 综合检查导入模板
/// </summary>
public const string CheckColligationTemplateUrl = "File\\Excel\\DataIn\\综合检查导入模板.xls";
@@ -5280,5 +5272,42 @@ namespace BLL
/// 重点工程项目质量专项整治行动开展情况台账
/// </summary>
public const string DCGLKeyProjectRectificationSituationLedgerMenuId = "35BA8E89-4575-4A3F-9C22-98B323E67DA1";
/// <summary>
/// 临时用电
/// </summary>
public const string ProjectTemporaryElectricityListMenuId = "09B2A0A6-A693-4F1D-A4F5-D5DEA803D771";
#region
/// <summary>
/// 安全监督检查报告
/// </summary>
public const string SuperviseCheckReportMenuId = "40387C48-95A0-435C-82FB-57AF0A81B9D4";
/// <summary>
/// 安全监督检查整改
/// </summary>
public const string SuperviseCheckRectifyMenuId = "A02E0365-383C-49A0-BF1A-B3E42052959B";
/// <summary>
/// 企业安全检查菜单ID
/// </summary>
public const string UnitHazardRegisterMenu_Safety = "C46C007E-A100-4A52-9317-3B885442E130";
/// <summary>
/// 企业质量检查菜单ID
/// </summary>
public const string UnitHazardRegisterMenu_Quality = "FDA7722C-383E-4BB1-B29D-BB0BF87AA942";
/// <summary>
/// 企业安全检查菜单记录ID
/// </summary>
public const string UnitHazardRegisterMenuRecord_Safety = "73283863-CF67-44CA-9DF8-67071734A528";
/// <summary>
/// 企业质量检查菜单记录ID
/// </summary>
public const string UnitHazardRegisterMenuRecord_Quality = "15511354-9822-4A21-AB24-2483D889FDB8";
#endregion
}
}
+71
View File
@@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace BLL
{
/// <summary>
/// 数据合并清理
/// </summary>
public class DataCleanupMergeHelper
{
/// <summary>
/// 数据合并清理
/// </summary>
/// <param name="exTable">排除操作数据表</param>
/// <param name="columType">替换字段(模糊匹配)</param>
/// <param name="mergeDataIds">需要替换的数据值</param>
/// <param name="dataId">新的字段数据值</param>
/// <returns></returns>
public static bool DataCleanupMerge(string exTable, string columType, List<string> mergeDataIds, string dataId, ref string msg)
{
bool result = false;
try
{
Model.SGGLDB db = Funs.DB;
var clist = db.DataIdMove.Where(x => x.ColumType == columType && x.NewIds == dataId).ToList();
db.DataIdMove.DeleteAllOnSubmit(clist);
db.SubmitChanges();
List<Model.DataIdMove> list = new List<Model.DataIdMove>();
foreach (var mergeId in mergeDataIds)
{
list.Add(new Model.DataIdMove { OldId = mergeId.Trim(), NewIds = dataId.Trim(), ColumType = columType });
}
db.DataIdMove.InsertAllOnSubmit(list);
db.SubmitChanges();
//SP_DataIdMove[排除操作数据表,替换字段(模糊匹配),字段数据值]
string strSql = $"exec SP_DataIdMove '{exTable}','{columType}','{dataId}'";
result = BLL.SQLHelper.ExecuteSql(strSql);
//SqlParameter[] parameters = {
// new SqlParameter("@exTable", exTable),
// new SqlParameter("@colums", columType),
// new SqlParameter("@trueId", dataId),
// new SqlParameter("@returnVal", SqlDbType.Int)
//};
//BLL.SQLHelper.ExecuteNonQueryStoredProcedure("SP_DataIdMove", parameters);
//int succ = BLL.SQLHelper.ExecuteProcedure("SP_DataIdMove", parameters);
//Thread.Sleep(30000); // 等待30秒,30000毫秒等于30秒
if (result)
{
db.DataIdMove.DeleteAllOnSubmit(list);
db.SubmitChanges();
msg = "数据合并成功!";
}
else
{
msg = "数据合并失败,请稍后再试!";
}
}
catch (Exception ex)
{
msg = ex.Message;
result = false;
}
return result;
}
}
}
@@ -0,0 +1,615 @@
using System.Linq;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
namespace BLL
{
/// <summary>
/// 数据共享互通辅助服务
/// </summary>
public class APIDataShareSyncService
{
#region
/// <summary>
/// 获取班组Id
/// </summary>
/// <param name="TeamGroupName"></param>
/// <param name="projectId"></param>
/// <param name="unitId"></param>
/// <returns></returns>
public static string GetTeamGroupId(string TeamGroupName, string projectId, string unitId)
{
string TeamGroupId = null;
if (!string.IsNullOrEmpty(TeamGroupName))
{
var tg = Funs.DB.ProjectData_TeamGroup.Where(x =>
x.TeamGroupName == TeamGroupName && x.ProjectId == projectId && x.UnitId == unitId).ToList();
if (tg.Count == 0)
{
Model.ProjectData_TeamGroup newTeamGroup = new Model.ProjectData_TeamGroup
{
TeamGroupId = SQLHelper.GetNewID(typeof(Model.ProjectData_TeamGroup)),
ProjectId = projectId,
UnitId = unitId,
TeamGroupName = TeamGroupName,
Remark = "分包数据同步导入"
};
TeamGroupService.AddTeamGroup(newTeamGroup);
TeamGroupId = newTeamGroup.TeamGroupId;
}
else
{
TeamGroupId = tg.FirstOrDefault().TeamGroupId;
}
}
return TeamGroupId;
}
#endregion
#region
/// <summary>
/// 获取作业票许可证类型Id
/// </summary>
/// <param name="LicenseTypeId"></param>
/// <param name="LicenseTypeCode"></param>
/// <param name="LicenseTypeName"></param>
/// <returns></returns>
public static string GetLicenseTypeId(string LicenseTypeId, string LicenseTypeCode, string LicenseTypeName)
{
string Id = null;
if (!string.IsNullOrEmpty(LicenseTypeName))
{
var obj = Funs.DB.Base_LicenseType.Where(x => x.LicenseTypeName == LicenseTypeName).ToList();
if (obj.Count == 0)
{
string newId = LicenseTypeId;
var type = Funs.DB.Base_LicenseType.Where(x => x.LicenseTypeId == LicenseTypeId).FirstOrDefault();
if (type == null)
{
newId = SQLHelper.GetNewID(typeof(Model.Base_LicenseType));
}
Model.Base_LicenseType newModel = new Model.Base_LicenseType
{
LicenseTypeId = newId,
LicenseTypeCode = LicenseTypeCode,
LicenseTypeName = LicenseTypeName,
Remark = "分包数据同步导入"
};
LicenseTypeService.AddLicenseType(newModel);
Id = newId;
}
else
{
Id = obj.FirstOrDefault().LicenseTypeId;
}
}
return Id;
}
#endregion
#region
/// <summary>
/// 作业区域
/// </summary>
/// <param name="UnitWorkName"></param>
/// <param name="projectId"></param>
/// <returns></returns>
public static string getUnitWorkId(string UnitWorkName, string projectId)
{
string UnitWorkId = null;
if (!string.IsNullOrEmpty(UnitWorkName))
{
var uw = Funs.DB.WBS_UnitWork.Where(x =>
x.UnitWorkName == UnitWorkName && x.ProjectId == projectId && x.SuperUnitWork == null).ToList();
if (uw.Count == 0)
{
Model.WBS_UnitWork newUnitWork = new Model.WBS_UnitWork
{
UnitWorkId = SQLHelper.GetNewID(typeof(Model.WBS_UnitWork)),
ProjectId = projectId,
UnitWorkName = UnitWorkName,
};
UnitWorkService.AddUnitWork(newUnitWork);
UnitWorkId = newUnitWork.UnitWorkId;
}
else
{
UnitWorkId = uw.FirstOrDefault().UnitWorkId;
}
}
return UnitWorkId;
}
#endregion
#region
/// <summary>
/// 获取系统用户
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public static string getUserId(string userName)
{
string UserId = null;
if (!string.IsNullOrEmpty(userName))
{
var u = Funs.DB.Person_Persons.Where(x =>
x.PersonName == userName).ToList();
if (u.Count == 0)
{
Model.Person_Persons newUser = new Model.Person_Persons
{
PersonId = SQLHelper.GetNewID(typeof(Model.Person_Persons)),
PersonName = userName,
// Remark = "导入",
};
Person_PersonsService.AddPerson(newUser);
UserId = newUser.PersonId;
}
else
{
UserId = u.FirstOrDefault().PersonId;
}
}
return UserId;
}
#endregion
#region
/// <summary>
/// 获取检查类别
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public static string getCheckItemSetId(string checkItemName)
{
string CheckItemSetId = null;
if (!string.IsNullOrEmpty(checkItemName))
{
var cis = Funs.DB.Technique_CheckItemSet.Where(x =>
x.CheckItemName == checkItemName && x.CheckType == "2").ToList();
if (cis.Count == 0)
{
Model.Technique_CheckItemSet newCheckItemSet = new Model.Technique_CheckItemSet
{
CheckItemSetId = SQLHelper.GetNewID(typeof(Model.Technique_CheckItemSet)),
CheckItemName = checkItemName,
SupCheckItem = "0",
CheckType = "2",
};
Technique_CheckItemSetService.AddCheckItemSet(newCheckItemSet);
CheckItemSetId = newCheckItemSet.CheckItemSetId;
}
else
{
CheckItemSetId = cis.FirstOrDefault().CheckItemSetId;
}
}
return CheckItemSetId;
}
#endregion
#region
/// <summary>
/// 获取巡检问题类型
/// </summary>
/// <param name="RegisterTypesName"></param>
/// <returns></returns>
public static string getRegisterTypesId(string RegisterTypesName)
{
string RegisterTypesId = null;
if (!string.IsNullOrEmpty(RegisterTypesName))
{
var ht = Funs.DB.HSSE_Hazard_HazardRegisterTypes.Where(x =>
x.RegisterTypesName == RegisterTypesName && x.HazardRegisterType == "1").ToList();
if (ht.Count == 0)
{
Model.HSSE_Hazard_HazardRegisterTypes newHazardRegisterTypes = new Model.HSSE_Hazard_HazardRegisterTypes
{
RegisterTypesId = SQLHelper.GetNewID(typeof(Model.HSSE_Hazard_HazardRegisterTypes)),
RegisterTypesName = RegisterTypesName,
HazardRegisterType = "1",
Remark = "导入",
};
HSSE_Hazard_HazardRegisterTypesService.AddHazardRegisterTypes(newHazardRegisterTypes);
RegisterTypesId = newHazardRegisterTypes.RegisterTypesId;
}
else
{
RegisterTypesId = ht.FirstOrDefault().RegisterTypesId;
}
}
return RegisterTypesId;
}
#endregion
#region
/// <summary>
/// 特岗证书
/// </summary>
/// <param name="CertificateName"></param>
/// <returns></returns>
public static Model.CertificateItem GetPersonQualityByPersonId(string personId)
{
Model.CertificateItem item = new Model.CertificateItem();
var personQuality = PersonQualityService.GetPersonQualityByPersonId(personId);
if (personQuality != null)
{
item.PersonQualityId = personQuality.PersonQualityId;//主键
item.CertificateId = personQuality.CertificateId;
item.CertificateName = personQuality.CertificateName;
item.CertificateNo = personQuality.CertificateNo;
item.CertificateLimitDate = personQuality.LimitDate;
}
return item;
}
#endregion
#region
public static void ProcessPersonQualityData(Model.CertificateItem item, string personId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
if (item == null)
{
return;
}
if (!string.IsNullOrEmpty(item.CertificateId))
{
var personQuality = BLL.PersonQualityService.GetPersonQualityByPersonId(personId);
var certificate =
db.Base_Certificate.FirstOrDefault(e => e.CertificateId == item.CertificateId);
var CertificateId = string.Empty;
if (certificate != null)
{
CertificateId = certificate.CertificateId;
}
else
{
Model.Base_Certificate newCertificate = new Model.Base_Certificate
{
CertificateId = SQLHelper.GetNewID(typeof(Model.Base_Certificate)),
CertificateName = item.CertificateName,
Remark = "导入"
};
db.Base_Certificate.InsertOnSubmit(newCertificate);
db.SubmitChanges();
// BLL.CertificateService.AddCertificate(newCertificate);
CertificateId = newCertificate.CertificateId;
}
if (personQuality != null)
{
personQuality.CertificateId = CertificateId;
personQuality.CertificateName = item.CertificateName;
personQuality.CertificateNo = item.CertificateNo;
personQuality.LimitDate = item.CertificateLimitDate;
BLL.PersonQualityService.UpdatePersonQuality(personQuality);
}
else
{
Model.QualityAudit_PersonQuality newPersonQuality = new Model.QualityAudit_PersonQuality
{
PersonQualityId = SQLHelper.GetNewID(typeof(Model.QualityAudit_PersonQuality)),
PersonId = personId,
};
newPersonQuality.CertificateId = CertificateId;
newPersonQuality.CertificateName = item.CertificateName;
newPersonQuality.CertificateNo = item.CertificateNo;
newPersonQuality.LimitDate = item.CertificateLimitDate;
BLL.PersonQualityService.AddPersonQuality(newPersonQuality);
}
}
}
}
#endregion
#region
/// <summary>
/// 岗位
/// </summary>
/// <param name="WorkPostName"></param>
/// <returns></returns>
public static string getWorkPostId(string WorkPostName, string PostType, string IsHsse, string IsCQMS)
{
string WorkPostId = null;
if (!string.IsNullOrEmpty(WorkPostName))
{
var wp = Funs.DB.Base_WorkPost.Where(x => x.WorkPostName == WorkPostName).ToList();
if (wp.Count == 0)
{
Model.Base_WorkPost newWorkPost = new Model.Base_WorkPost
{
WorkPostId = SQLHelper.GetNewID(typeof(Model.Base_WorkPost)),
WorkPostName = WorkPostName,
PostType = PostType,
IsHsse = Convert.ToBoolean(IsHsse),
IsCQMS = Convert.ToBoolean(IsCQMS),
Remark = "导入"
};
WorkPostService.AddWorkPost(newWorkPost);
WorkPostId = newWorkPost.WorkPostId;
}
else
{
WorkPostId = wp.FirstOrDefault().WorkPostId;
}
}
return WorkPostId;
}
#endregion
#region
/// <summary>
/// 单位工程
/// </summary>
/// <param name="WorkAreaName"></param>
/// <param name="projectId"></param>
/// <returns></returns>
public static string getWorkAreaId(string WorkAreaName, string projectId)
{
string WorkAreaId = null;
if (!string.IsNullOrEmpty(WorkAreaName))
{
var names = WorkAreaName.Split(',');
List<string> workAreaIdList = new List<string>();
foreach (var name in names)
{
var uw = Funs.DB.WBS_UnitWork.Where(x =>
x.UnitWorkName == name && x.ProjectId == projectId).ToList();
if (uw.Count == 0)
{
Model.WBS_UnitWork newUnitWork = new Model.WBS_UnitWork
{
UnitWorkId = SQLHelper.GetNewID(typeof(Model.WBS_UnitWork)),
ProjectId = projectId,
UnitWorkName = name,
};
UnitWorkService.AddUnitWork(newUnitWork);
workAreaIdList.Add(newUnitWork.UnitWorkId);
}
else
{
workAreaIdList.Add(uw.FirstOrDefault().UnitWorkId);
}
}
WorkAreaId = string.Join(",", workAreaIdList);
}
return WorkAreaId;
}
#endregion
#region id获取单位工程名称
/// <summary>
/// 获取根据id获取单位工程名称
/// </summary>
/// <param name="WorkAreaId"></param>
/// <param name="projectId"></param>
/// <returns></returns>
public static string GetWorkAreaNames(string WorkAreaId, string projectId)
{
string WorkAreaNames = string.Empty;
if (!string.IsNullOrEmpty(WorkAreaId))
{
var workAreas = WorkAreaId.Split(',');
//创建一个数组集合
List<string> workAreaNameList = new List<string>();
foreach (var workArea in workAreas)
{
var WorkAreaName = Funs.DB.WBS_UnitWork
.First(x => x.UnitWorkId == workArea && x.ProjectId == projectId)
.UnitWorkName;
workAreaNameList.Add(WorkAreaName);
}
WorkAreaNames = string.Join(",", workAreaNameList);
}
return WorkAreaNames;
}
#endregion
#region base64的文件
public static async Task<byte[]> DownloadHeadImageAsync(string webUrl, string photoUrl)
{
byte[] b = null;
try
{
if (!string.IsNullOrEmpty(photoUrl))
{
string localRoot = ConfigurationManager.AppSettings["localRoot"]; // 物理路径
// 先下载到本地(异步等待完成)
DownloadAndSaveFileWithRetryAsync(webUrl, photoUrl, localRoot);
b = AttachFileService.SetImageToByteArray(localRoot + photoUrl.Split(',')[0]);
}
}
catch (Exception ex)
{
throw ex;
}
return b;
}
#endregion
#region AttachFile文件表中添加或修改数据
public static async Task OperationAttachFile(string webUrl, string tokeyId, string menuId, string attachFileUrl)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
if (!string.IsNullOrEmpty(attachFileUrl))
{
string localRoot = ConfigurationManager.AppSettings["localRoot"]; //物理路径
//attachFileUrl可能是多个
string[] attachFileUrls = attachFileUrl.Split(',');
var attachFile = db.AttachFile.FirstOrDefault(x => x.ToKeyId == tokeyId && x.MenuId == menuId);
if (attachFile != null)
{
if (attachFile.AttachUrl != attachFileUrl)
{
string[] oldAttachFileUrls = attachFile.AttachUrl.Split(',');
foreach (var oldFileUrl in oldAttachFileUrls)
{
//删除之前的
UploadFileService.DeleteFile(localRoot, oldFileUrl);
}
foreach (var fileUrl in attachFileUrls)
{
DownloadAndSaveFileWithRetryAsync(webUrl, fileUrl, localRoot);
}
UploadFileService.SaveAttachUrl(
UploadFileService.GetSourceByAttachUrl(attachFileUrl, 10, null),
attachFileUrl, menuId, tokeyId);
}
}
else
{
foreach (var fileUrl in attachFileUrls)
{
DownloadAndSaveFileWithRetryAsync(webUrl, fileUrl, localRoot);
}
UploadFileService.SaveAttachUrl(
UploadFileService.GetSourceByAttachUrl(attachFileUrl, 10, null),
attachFileUrl, menuId, tokeyId);
}
}
}
}
public static async Task DownloadAndSaveFileAsync(string webUrl, string attachFileUrl, string localPath)
{
// 验证输入参数
if (string.IsNullOrEmpty(webUrl) || string.IsNullOrEmpty(attachFileUrl) || string.IsNullOrEmpty(localPath))
{
BLL.ErrLogInfo.WriteLog(
$"下载文件参数无效: webUrl={webUrl}, attachFileUrl={attachFileUrl}, localPath={localPath}");
return;
}
try
{
// 构造完整的远程文件 URL
string fullRemoteUrl = $"{webUrl.TrimEnd('/')}/{attachFileUrl.TrimStart('/')}";
// 构造本地文件路径
string localFilePath = Path.Combine(localPath, attachFileUrl);
// 确保本地目录存在
string directoryPath = Path.GetDirectoryName(localFilePath);
if (!string.IsNullOrEmpty(directoryPath) && !Directory.Exists(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
// 使用独立的HttpClient实例并配置不捕获同步上下文
using (var httpClient = new HttpClient())
{
// 设置合理的超时时间
httpClient.Timeout = TimeSpan.FromMinutes(3);
// 下载文件字节(使用ConfigureAwait(false)避免上下文问题)
byte[] fileBytes = await httpClient.GetByteArrayAsync(fullRemoteUrl).ConfigureAwait(false);
// 写入文件(同样使用ConfigureAwait(false)
await Task.Run(() => File.WriteAllBytes(localFilePath, fileBytes)).ConfigureAwait(false);
}
}
catch (HttpRequestException httpEx)
{
BLL.ErrLogInfo.WriteLog($"HTTP请求失败 - URL: {webUrl}/{attachFileUrl}", httpEx);
// 不抛出异常,让调用方继续处理
}
catch (DirectoryNotFoundException dirEx)
{
BLL.ErrLogInfo.WriteLog($"目录创建失败 - 路径: {localPath}", dirEx);
}
catch (UnauthorizedAccessException authEx)
{
BLL.ErrLogInfo.WriteLog($"文件访问权限不足 - 路径: {Path.Combine(localPath, attachFileUrl)}", authEx);
}
catch (Exception ex)
{
BLL.ErrLogInfo.WriteLog($"下载文件失败 - URL: {webUrl}/{attachFileUrl}", ex);
// 不重新抛出异常,避免中断整个流程
}
}
// 添加重试机制的下载方法
public static async Task<bool> DownloadAndSaveFileWithRetryAsync(string webUrl, string attachFileUrl,
string localPath, int maxRetries = 3)
{
for (int attempt = 0; attempt < maxRetries; attempt++)
{
try
{
await DownloadAndSaveFileAsync(webUrl, attachFileUrl, localPath);
return true; // 成功下载
}
catch (HttpRequestException)
{
if (attempt == maxRetries - 1)
{
BLL.ErrLogInfo.WriteLog($"下载失败,已重试{maxRetries}次 - URL: {webUrl}/{attachFileUrl}");
return false;
}
// 等待后重试
await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
}
}
return false;
}
#endregion
}
}
@@ -0,0 +1,537 @@
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 APICheckSpecialSyncService
{
#region
public static List<Model.CheckSpecialSyncItem> GetCheckSpecialLitsByprojectIdUnitId(string projectId,
string unitId, string dataId = "")
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var list = from x in db.Check_CheckSpecial where x.ProjectId == projectId select x;
if (!string.IsNullOrEmpty(unitId))
{
// 通过关联明细表来筛选包含指定单位的主表数据
var specialIdsWithUnit = (from detail in db.Check_CheckSpecialDetail
where detail.UnitId == unitId
select detail.CheckSpecialId).Distinct();
list = list.Where(x => specialIdsWithUnit.Contains(x.CheckSpecialId));
}
if (!string.IsNullOrEmpty(dataId))
{
list = list.Where(x => x.CheckSpecialId == dataId);
}
var dataList = (from x in list
join cis in db.Technique_CheckItemSet on x.CheckItemSetId equals cis.CheckItemSetId into cisTemp
from cis in cisTemp.DefaultIfEmpty()
join att in db.AttachFile on x.CheckSpecialId equals att.ToKeyId into attTemp
from att in attTemp.DefaultIfEmpty()
select new CheckSpecialSyncItem
{
CheckSpecialId = x.CheckSpecialId,
CheckSpecialCode = x.CheckSpecialCode,
ProjectId = x.ProjectId,
CheckPerson = x.CheckPerson,
CheckTime = x.CheckTime,
ScanUrl = x.ScanUrl,
DaySummary = x.DaySummary,
PartInUnits = x.PartInUnits,
PartInPersons = x.PartInPersons,
CheckAreas = x.CheckAreas,
States = x.States,
CompileMan = x.CompileMan,
CheckType = x.CheckType,
PartInPersonIds = x.PartInPersonIds,
PartInPersonNames = x.PartInPersonNames,
CheckItemSetId = x.CheckItemSetId,
CheckItemName = cis.CheckItemName,
AttachFileId1 = att.AttachFileId,
ToKeyId1 = att.ToKeyId,
AttachSource1 = att.AttachSource,
AttachUrl1 = att.AttachUrl,
CheckSpecialDetails = GetCheckSpecialDetailLists(x.CheckSpecialId),
}).ToList();
return dataList;
}
}
//根据专项检查id获取专项检查明细数据
public static List<Model.CheckSpecialDetailSyncItem> GetCheckSpecialDetailLists(string checkSpecialId)
{
var detailLists = (from x in Funs.DB.Check_CheckSpecialDetail
join ht in Funs.DB.HSSE_Hazard_HazardRegisterTypes on x.CheckItem equals ht.RegisterTypesId into htTemp
from ht in htTemp.DefaultIfEmpty()
join uw in Funs.DB.WBS_UnitWork on x.CheckArea equals uw.UnitWorkId into uwTemp
from uw in uwTemp.DefaultIfEmpty()
//join u1 in Funs.DB.Sys_User on x.HSEManage equals u1.UserId into u1Temp
//from u1 in u1Temp.DefaultIfEmpty()
join att in Funs.DB.AttachFile on x.CheckSpecialDetailId equals att.ToKeyId into attTemp
from att in attTemp.DefaultIfEmpty()
where x.CheckSpecialId == checkSpecialId
select new CheckSpecialDetailSyncItem
{
CheckSpecialDetailId = x.CheckSpecialDetailId,
CheckSpecialId = x.CheckSpecialId,
CheckItem = x.CheckItem,
CheckItemName = ht.RegisterTypesName,
CheckItemType = x.CheckItemType,
Unqualified = x.Unqualified,
CheckArea = x.CheckArea,
CheckAreaName = uw.UnitWorkName,
UnitId = x.UnitId,
CompleteStatus = x.CompleteStatus,
LimitedDate = x.LimitedDate,
CompletedDate = x.CompletedDate,
Suggestions = x.Suggestions,
HandleStep = x.HandleStep,
RectifyNoticeId = x.RectifyNoticeId,
CheckContent = x.CheckContent,
WorkArea = x.WorkArea,
DataId = x.DataId,
DataType = x.DataType,
SortIndex = x.SortIndex,
HiddenHazardType = x.HiddenHazardType,
//HSEManage = x.HSEManage,
HSEManage="",
//HSEManageName = u1.UserName,
HSEManageName = "",
RiskLevel = x.HiddenHazardType,
//LimitDate = x.LimitDate,
//AttachUrl = x.AttachUrl,
//HandleWay = x.HandleWay,
//RectifyOpinion = x.RectifyOpinion,
RectifyOpinion = x.HandleStep,
//RectifyDate = x.RectifyDate,
//ReAttachUrl = x.ReAttachUrl,
//State = x.State,
//ProposeUnitId = x.ProposeUnitId,
//SaveHandleMan = x.SaveHandleMan,
AttachFileId1 = att.AttachFileId,
ToKeyId1 = att.ToKeyId,
AttachSource1 = att.AttachSource,
AttachUrl1 = att.AttachUrl,
})
.ToList();
return detailLists;
}
#endregion
#region
public static async Task<string> getCheckSpecialLists(string projectId = "")
{
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.SubjectUnit != null &&
x.SubjectProject != null
select x).ToList();
if (!string.IsNullOrEmpty(projectId))
{
ProjectList = ProjectList.Where(x => x.ProjectId == projectId).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";//测试使用
string url = "/api/CheckSpecialSync/getCheckSpecialListByProjectIdAndCollCropCode?projectId=" +
SubjectProjectId + "&collCropCode=" + CollCropCode;
string baseurl = ApiUrl + url;
string contenttype = "application/json;charset=unicode";
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<CheckSpecialSyncItem>>(obj["data"].ToString());
if (getData.Count() > 0)
{
ProcessCheckSpecialData(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 pushCheckSpecialLists(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 = GetCheckSpecialLitsByprojectIdUnitId(projectId, "", dataId);
//总包地址推送
if (items.Count() > 0)
{
var thisUnit = CommonService.GetIsThisUnit(); //当前单位
var apiurl = "/api/CheckSpecialSync/SaveCheckSpecialSyncData";
//总包单位接口地址
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 CheckSpecialSyncData
{
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> SaveCheckSpecialSyncData(Model.CheckSpecialSyncData items)
{
int code = 0;
string message = "";
try
{
if (items.Items.Count > 0 || items.Items.Count > 0)
{
//获取CollCropCode
var CollCropCode = items.CollCropCode;
var ProjectId = items.ProjectId;
var UnitDomain = items.UnitDomain; //分包单位域名地址【文件存储地址】
//根据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
{
ProcessCheckSpecialData(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 void ProcessCheckSpecialData(List<Model.CheckSpecialSyncItem> getData, string projectId,
string unitId, string WebUrl)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
foreach (var item in getData)
{
var model = db.Check_CheckSpecial.FirstOrDefault(e => e.CheckSpecialId == item.CheckSpecialId);
if (model == null)
{
Model.Check_CheckSpecial newModel = new Model.Check_CheckSpecial
{
CheckSpecialId = item.CheckSpecialId,
CheckSpecialCode = item.CheckSpecialCode,
ProjectId = projectId,
CheckPerson = item.CheckPerson,
CheckTime = item.CheckTime,
ScanUrl = item.ScanUrl,
DaySummary = item.DaySummary,
PartInUnits = item.PartInUnits,
PartInPersons = item.PartInPersons,
CheckAreas = item.CheckAreas,
States = item.States,
CompileMan = item.CompileMan,
CheckType = item.CheckType,
PartInPersonIds = item.PartInPersonIds,
PartInPersonNames = item.PartInPersonNames,
CheckItemSetId = APIDataShareSyncService.getCheckItemSetId(item.CheckItemName),
};
db.Check_CheckSpecial.InsertOnSubmit(newModel);
db.SubmitChanges();
}
else
{
model.CheckSpecialId = item.CheckSpecialId;
model.CheckSpecialCode = item.CheckSpecialCode;
model.ProjectId = projectId;
model.CheckPerson = item.CheckPerson;
model.CheckTime = item.CheckTime;
model.ScanUrl = item.ScanUrl;
model.DaySummary = item.DaySummary;
model.PartInUnits = item.PartInUnits;
model.PartInPersons = item.PartInPersons;
model.CheckAreas = item.CheckAreas;
model.States = item.States;
model.CompileMan = item.CompileMan;
model.CheckType = item.CheckType;
model.PartInPersonIds = item.PartInPersonIds;
model.PartInPersonNames = item.PartInPersonNames;
model.CheckItemSetId = APIDataShareSyncService.getCheckItemSetId(item.CheckItemName);
db.SubmitChanges();
}
if (!string.IsNullOrEmpty(item.AttachUrl1)) //主表附件
{
APIDataShareSyncService.OperationAttachFile(WebUrl, item.CheckSpecialId,
BLL.Const.ProjectCheckSpecialMenuId, item.AttachUrl1);
}
//处理专项检查明细数据
ProcessCheckSpecialDetailData(item.CheckSpecialDetails, projectId, unitId, WebUrl);
}
}
}
#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 void ProcessCheckSpecialDetailData(List<Model.CheckSpecialDetailSyncItem> getData,
string projectId,
string unitId, string WebUrl)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
foreach (var item in getData)
{
var model = db.Check_CheckSpecialDetail.FirstOrDefault(e =>
e.CheckSpecialDetailId == item.CheckSpecialDetailId);
if (model == null)
{
Model.Check_CheckSpecialDetail newModel = new Model.Check_CheckSpecialDetail
{
CheckSpecialDetailId = item.CheckSpecialDetailId,
CheckSpecialId = item.CheckSpecialId,
CheckItem = APIDataShareSyncService.getRegisterTypesId(item.CheckItemName),
CheckItemType = item.CheckItemType,
Unqualified = item.Unqualified,
CheckArea = APIDataShareSyncService.getUnitWorkId(item.CheckAreaName, projectId),
UnitId = unitId,
CompleteStatus = item.CompleteStatus,
LimitedDate = item.LimitedDate,
CompletedDate = item.CompletedDate,
Suggestions = item.Suggestions,
HandleStep = item.HandleStep,
RectifyNoticeId = item.RectifyNoticeId,
CheckContent = item.CheckContent,
WorkArea = item.WorkArea,
DataId = item.DataId,
DataType = item.DataType,
SortIndex = item.SortIndex,
HiddenHazardType = item.HiddenHazardType,
//HSEManage = APIDataShareSyncService.getUserId(item.HSEManageName),
//RiskLevel = item.RiskLevel,
//LimitDate = item.LimitDate,
//AttachUrl = item.AttachUrl,
//HandleWay = item.HandleWay,
//RectifyOpinion = item.RectifyOpinion,
//HandleStep= item.RectifyOpinion,
//RectifyDate = item.RectifyDate,
//ReAttachUrl = item.ReAttachUrl,
//State = item.State,
//ProposeUnitId = item.ProposeUnitId,
//SaveHandleMan = item.SaveHandleMan,
};
db.Check_CheckSpecialDetail.InsertOnSubmit(newModel);
db.SubmitChanges();
}
else
{
// model.CheckSpecialDetailId = item.CheckSpecialDetailId;
model.CheckSpecialId = item.CheckSpecialId;
model.CheckItem = APIDataShareSyncService.getRegisterTypesId(item.CheckItemName);
model.CheckItemType = item.CheckItemType;
model.Unqualified = item.Unqualified;
model.CheckArea = APIDataShareSyncService.getUnitWorkId(item.CheckAreaName, projectId);
model.UnitId = unitId;
model.CompleteStatus = item.CompleteStatus;
model.LimitedDate = item.LimitedDate;
model.CompletedDate = item.CompletedDate;
model.Suggestions = item.Suggestions;
model.HandleStep = item.HandleStep;
model.RectifyNoticeId = item.RectifyNoticeId;
model.CheckContent = item.CheckContent;
model.WorkArea = item.WorkArea;
model.DataId = item.DataId;
model.DataType = item.DataType;
model.SortIndex = item.SortIndex;
model.HiddenHazardType = item.HiddenHazardType;
//model.HSEManage = APIDataShareSyncService.getUserId(item.HSEManageName);
//model.RiskLevel = item.RiskLevel;
model.HiddenHazardType = item.RiskLevel;
//model.LimitDate = item.LimitDate;
//model.AttachUrl = item.AttachUrl;
//model.HandleWay = item.HandleWay;
//model.RectifyOpinion = item.RectifyOpinion;
//model.RectifyDate = item.RectifyDate;
//model.ReAttachUrl = item.ReAttachUrl;
//model.State = item.State;
//model.ProposeUnitId = item.ProposeUnitId;
//model.SaveHandleMan = item.SaveHandleMan;
db.SubmitChanges();
}
if (!string.IsNullOrEmpty(item.AttachUrl1)) //整改前图片
{
APIDataShareSyncService.OperationAttachFile(WebUrl, item.CheckSpecialDetailId,
BLL.Const.ProjectCheckSpecialMenuId, item.AttachUrl1);
}
}
}
}
#endregion
}
}
@@ -0,0 +1,468 @@
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 APIHazardRegisterSyncService
{
#region
public static List<Model.HazardRegisterSyncItem> GetHazardRegisterLitsByprojectIdUnitIdPage(string projectId,
string unitId, string dataId = "")
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var list = from x in db.HSSE_Hazard_HazardRegister where x.ProjectId == projectId select x;
if (!string.IsNullOrEmpty(unitId))
{
list = list.Where(x => x.ResponsibleUnit == unitId);
}
if (!string.IsNullOrEmpty(dataId))
{
list = list.Where(x => x.HazardRegisterId == dataId);
}
var dataList = (from x in list
join ht in db.HSSE_Hazard_HazardRegisterTypes on x.RegisterTypesId equals ht.RegisterTypesId into htTemp
from ht in htTemp.DefaultIfEmpty()
join uw in db.WBS_UnitWork on x.Place equals uw.UnitWorkId into uwTemp
from uw in uwTemp.DefaultIfEmpty()
join u1 in db.Person_Persons on x.ResponsibleMan equals u1.PersonId into u1Temp
from u1 in u1Temp.DefaultIfEmpty()
join u2 in db.Person_Persons on x.CheckManId equals u2.PersonId into u2Temp
from u2 in u2Temp.DefaultIfEmpty()
join u3 in db.Person_Persons on x.ConfirmMan equals u3.PersonId into u3Temp
from u3 in u3Temp.DefaultIfEmpty()
join u4 in db.Person_Persons on x.ResponsibleMan2 equals u4.PersonId into u4Temp
from u4 in u4Temp.DefaultIfEmpty()
select new HazardRegisterSyncItem
{
HazardRegisterId = x.HazardRegisterId,
HazardCode = x.HazardCode,
RegisterDate = x.RegisterDate,
RegisterDef = x.RegisterDef,
Rectification = x.Rectification,
Place = x.Place,
PlaceName = uw.UnitWorkName,
ResponsibleUnit = x.ResponsibleUnit,
Observer = x.Observer,
RectifiedDate = x.RectifiedDate,
AttachUrl = x.AttachUrl,
ProjectId = x.ProjectId,
States = x.States,
IsEffective = x.IsEffective,
ResponsibleMan = x.ResponsibleMan,
ResponsibleManName = u1.PersonName,
CheckManId = x.CheckManId,
CheckManName = u2.PersonName,
CheckTime = x.CheckTime,
RectificationPeriod = x.RectificationPeriod,
ImageUrl = x.ImageUrl,
RectificationImageUrl = x.RectificationImageUrl,
RectificationTime = x.RectificationTime,
ConfirmMan = x.ConfirmMan,
ConfirmManName = u3.PersonName,
ConfirmDate = x.ConfirmDate,
HandleIdea = x.HandleIdea,
CutPayment = x.CutPayment,
ProblemTypes = x.ProblemTypes,
RegisterTypesId = x.RegisterTypesId,
RegisterTypesName = ht.RegisterTypesName,
CheckCycle = x.CheckCycle,
CheckItemDetailId = x.CheckItemDetailId,
SupCheckItemSetId = x.SupCheckItemSetId,
CheckItemSetId = x.CheckItemSetId,
CheckSpecialId = x.CheckSpecialId,
InstallationId = x.InstallationId,
SafeSupervisionId = x.SafeSupervisionId,
ResponsibleMan2 = x.ResponsibleMan2,
ResponsibleMan2Name = u4.PersonName,
SafeSupervisionIsOK = x.SafeSupervisionIsOK,
GpsLocation = x.GpsLocation,
IsWx = x.IsWx,
DIC_ID = x.DIC_ID,
CCManIds = x.CCManIds,
ResultType = x.ResultType,
ResultId = x.ResultId,
Requirements = x.Requirements,
Risk_Level = x.HazardValue,
ControlId = x.ControlId,
DataSource = "1",
}).ToList();
return dataList;
}
}
#endregion
#region
public static string getHazardRegisterLists(string projectId = "")
{
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.SubjectUnit != null &&
x.SubjectProject != null
select x).ToList();
if (!string.IsNullOrEmpty(projectId))
{
ProjectList = ProjectList.Where(x => x.ProjectId == projectId).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 = "91420000177570439L"; //三化建 测试使用
// SubjectProjectId = "c7ade79e-7646-4c59-a8fd-020a7e3138c6";//测试使用
string url =
"/api/HazardRegisterSync/getHazardRegisterListByProjectIdAndCollCropCode?projectId=" +
SubjectProjectId + "&collCropCode=" + CollCropCode;
string baseurl = ApiUrl + url;
string contenttype = "application/json;charset=unicode";
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<HazardRegisterSyncItem>>(obj["data"].ToString());
if (getData.Count() > 0)
{
ProcessHazardRegisterData(getData, project.ProjectId, unitId, WebUrl, "pull");
}
message = "获取成功:同步安全检查数" + getData.Count().ToString() + "条";
}
}
}
}
}
catch (Exception ex)
{
message = "获取失败:" + ex.Message;
ErrLogInfo.WriteLog("安全检查获取!", ex);
}
return message;
}
#endregion
#region
public static ReturnData pushHazardRegisterLists(string projectId, string dataId = "")
{
Model.ReturnData responeData = new Model.ReturnData();
responeData.code = 0;
responeData.message = string.Empty;
var project = Funs.DB.Base_Project.FirstOrDefault(x => x.ProjectId == projectId);
try
{
if (project != null)
{
//获取安全检查数据
var items = GetHazardRegisterLitsByprojectIdUnitIdPage(projectId, "", dataId);
//总包地址推送
if (items.Count() > 0)
{
var thisUnit = CommonService.GetIsThisUnit(); //当前单位
var apiurl = "/api/HazardRegisterSync/SaveHazardRegisterSyncData";
//总包单位接口地址
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 HazardRegisterSyncData
{
CollCropCode = thisUnit.CollCropCode, //分包单位社会统一信用码
// CollCropCode = "91420000177570439L", //分包单位社会统一信用码
// ProjectId = "c7ade79e-7646-4c59-a8fd-020a7e3138c6", //主包项目Id
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 string SaveHazardRegisterSyncData(Model.HazardRegisterSyncData items)
{
int code = 0;
string message = "";
try
{
if (items.Items.Count > 0 || items.Items.Count > 0)
{
var CollCropCode = items.CollCropCode; //分包单位社会统一信用码
var ProjectId = items.ProjectId; //总包项目Id
var UnitDomain = items.UnitDomain; //分包单位域名地址【文件存储地址】
var unit = Funs.DB.Base_Unit.FirstOrDefault(x => x.CollCropCode == CollCropCode); //根据CollCropCode获取单位id
if (unit == null)
{
message = "总包单位不存在本单位,请登录总包系统检查维护本单位信息!";
}
else
{
//2、判断主包项目是否存在
var porject = BLL.ProjectService.GetProjectByProjectId(ProjectId);
if (porject == null)
{
message = "总包单位不存在本项目,请检查总包项目关联是否正确!";
}
else
{
ProcessHazardRegisterData(items.Items, ProjectId, unit.UnitId, UnitDomain, "push");
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 void ProcessHazardRegisterData(List<Model.HazardRegisterSyncItem> getData, string projectId,
string unitId, string WebUrl, string type)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
foreach (var item in getData)
{
Model.HSSE_Hazard_HazardRegister model =
db.HSSE_Hazard_HazardRegister.FirstOrDefault(x => x.HazardRegisterId == item.HazardRegisterId);
if (model == null)
{
Model.HSSE_Hazard_HazardRegister newModel = new Model.HSSE_Hazard_HazardRegister
{
HazardRegisterId = item.HazardRegisterId,
HazardCode = item.HazardCode,
RegisterDate = item.RegisterDate,
RegisterDef = item.RegisterDef,
Rectification = item.Rectification,
Place = APIDataShareSyncService.getUnitWorkId(item.PlaceName, projectId),
ResponsibleUnit = unitId,
Observer = item.Observer,
AttachUrl = item.AttachUrl,
ProjectId = projectId,
States = item.States,
IsEffective = item.IsEffective,
ResponsibleMan = APIDataShareSyncService.getUserId(item.ResponsibleManName),
CheckManId = APIDataShareSyncService.getUserId(item.CheckManName),
CheckTime = item.CheckTime,
RectificationPeriod = item.RectificationPeriod,
ImageUrl = item.ImageUrl,
RectificationImageUrl = item.RectificationImageUrl,
RectificationTime = item.RectificationTime,
ConfirmMan = APIDataShareSyncService.getUserId(item.ConfirmManName),
ConfirmDate = item.ConfirmDate,
HandleIdea = item.HandleIdea,
CutPayment = item.CutPayment,
ProblemTypes = item.ProblemTypes,
RegisterTypesId = APIDataShareSyncService.getRegisterTypesId(item.RegisterTypesName),
CheckCycle = item.CheckCycle,
CheckItemDetailId = item.CheckItemDetailId,
SupCheckItemSetId = item.SupCheckItemSetId,
CheckItemSetId = item.CheckItemSetId,
CheckSpecialId = item.CheckSpecialId,
InstallationId = item.InstallationId,
SafeSupervisionId = item.SafeSupervisionId,
ResponsibleMan2 = APIDataShareSyncService.getUserId(item.ResponsibleMan2Name),
SafeSupervisionIsOK = item.SafeSupervisionIsOK,
GpsLocation = item.GpsLocation,
IsWx = item.IsWx,
DIC_ID = item.DIC_ID,
CCManIds = item.CCManIds,
ResultType = item.ResultType,
ResultId = item.ResultId,
Requirements = item.Requirements,
HazardValue = item.Risk_Level,
ControlId = item.ControlId,
};
if (type == "pull")
{
newModel.DataSource = item.DataSource;
}
db.HSSE_Hazard_HazardRegister.InsertOnSubmit(newModel);
db.SubmitChanges();
}
else
{
// model.HazardRegisterId = item.HazardRegisterId;
model.HazardCode = item.HazardCode;
model.RegisterDate = item.RegisterDate;
model.RegisterDef = item.RegisterDef;
model.Rectification = item.Rectification;
model.Place = APIDataShareSyncService.getUnitWorkId(item.PlaceName, projectId);
model.ResponsibleUnit = unitId;
model.Observer = item.Observer;
model.AttachUrl = item.AttachUrl;
model.ProjectId = projectId;
model.States = item.States;
model.IsEffective = item.IsEffective;
model.ResponsibleMan = APIDataShareSyncService.getUserId(item.ResponsibleManName);
model.CheckManId = APIDataShareSyncService.getUserId(item.CheckManName);
model.CheckTime = item.CheckTime;
model.RectificationPeriod = item.RectificationPeriod;
model.ImageUrl = item.ImageUrl;
model.RectificationImageUrl = item.RectificationImageUrl;
model.RectificationTime = item.RectificationTime;
model.ConfirmMan = APIDataShareSyncService.getUserId(item.ConfirmManName);
model.ConfirmDate = item.ConfirmDate;
model.HandleIdea = item.HandleIdea;
model.CutPayment = item.CutPayment;
model.ProblemTypes = item.ProblemTypes;
model.RegisterTypesId = APIDataShareSyncService.getRegisterTypesId(item.RegisterTypesName);
model.CheckCycle = item.CheckCycle;
model.CheckItemDetailId = item.CheckItemDetailId;
model.SupCheckItemSetId = item.SupCheckItemSetId;
model.CheckItemSetId = item.CheckItemSetId;
model.CheckSpecialId = item.CheckSpecialId;
model.InstallationId = item.InstallationId;
model.SafeSupervisionId = item.SafeSupervisionId;
model.ResponsibleMan2 = APIDataShareSyncService.getUserId(item.ResponsibleMan2Name);
model.SafeSupervisionIsOK = item.SafeSupervisionIsOK;
model.GpsLocation = item.GpsLocation;
model.IsWx = item.IsWx;
model.DIC_ID = item.DIC_ID;
model.CCManIds = item.CCManIds;
model.ResultType = item.ResultType;
model.ResultId = item.ResultId;
model.Requirements = item.Requirements;
model.HazardValue = item.Risk_Level;
model.ControlId = item.ControlId;
if (type == "pull")
{
model.DataSource = item.DataSource;
}
db.SubmitChanges();
}
if (!string.IsNullOrEmpty(item.ImageUrl))
{
APIDataShareSyncService.OperationAttachFile(WebUrl, item.HazardRegisterId,
BLL.Const.HSSE_HiddenRectificationListMenuId, item.ImageUrl);
}
if (!string.IsNullOrEmpty(item.RectificationImageUrl))
{
APIDataShareSyncService.OperationAttachFile(WebUrl, item.HazardRegisterId + "-R",
BLL.Const.HSSE_HiddenRectificationListMenuId, item.RectificationImageUrl);
}
}
}
}
#endregion
}
}
@@ -0,0 +1,265 @@
using Model;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
namespace BLL
{
/// <summary>
/// 作业票数据共享互通
/// </summary>
public class APILicenseSyncService
{
#region
/// <summary>
/// 推送分包作业票定稿数据
/// </summary>
/// <param name="projectId">项目Id</param>
/// <param name="dataId">作业票定稿数据Id(为空的时候推送全部)</param>
/// <returns></returns>
public static ReturnData PushLicenseManagerLists(string projectId, string dataId = "")
{
Model.ReturnData responeData = new Model.ReturnData();
responeData.code = 0;
responeData.message = string.Empty;
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
try
{
var list = from x in db.View_License_LicenseManager where x.ProjectId == projectId select x;
if (!string.IsNullOrWhiteSpace(dataId))
{
list = list.Where(x => x.LicenseManagerId == dataId);
}
var dataList = (from x in list
join blt in db.Base_LicenseType on x.LicenseTypeId equals blt.LicenseTypeId into bltGroup
from blt in bltGroup.DefaultIfEmpty()
join su in db.Person_Persons on x.CompileMan equals su.PersonId into sUser
from su in sUser.DefaultIfEmpty()
//join uw in db.WBS_UnitWork on x.WorkAreaId equals uw.UnitWorkId into uwGroup
//from uw in uwGroup.DefaultIfEmpty()
join att in db.AttachFile on x.LicenseManagerId equals att.ToKeyId into attTemp
from att in attTemp.DefaultIfEmpty()
join att1 in db.AttachFile on (x.LicenseManagerId + "_GB") equals att1.ToKeyId into att1Temp
from att1 in att1Temp.DefaultIfEmpty()
orderby x.CompileDate descending
select new LicenseManagerItem
{
ProjectId = x.ProjectId,
UnitId = x.UnitId,
LicenseManagerId = x.LicenseManagerId,
LicenseManagerCode = x.LicenseManagerCode,
LicenseManageName = x.LicenseManageName,
LicenseTypeId = x.LicenseTypeId,
LicenseTypeCode = blt.LicenseTypeCode,
LicenseTypeName = blt.LicenseTypeName,
LicenseManageContents = x.LicenseManageContents,
CompileMan = x.CompileMan,
CompileManName = su.PersonName,
CompileDate = x.CompileDate,
States = x.States,
WorkAreaId = x.WorkAreaId,
//UnitWorkCode = uw.UnitWorkCode,
//UnitWorkName = uw.UnitWorkName,
UnitWorkName = x.WorkAreaName,
StartDate = x.StartDate,
EndDate = x.EndDate,
ApplicantMan = x.ApplicantMan,
WorkStates = x.WorkStates,
IsHighRisk = x.IsHighRisk,
LicenseCodes = x.LicenseCodes,
SourceDes = x.SourceDes,
//AttachUrl = AttachFileService.getFileUrl(x.LicenseManagerId),//附件
//AttachUrl1 = AttachFileService.getFileUrl(x.LicenseManagerId + "_GB"),//关闭附件
AttachFileId = att.AttachFileId,
ToKeyId = att.ToKeyId,
AttachSource = att.AttachSource,
AttachUrl = att.AttachUrl,
AttachFileId1 = att1.AttachFileId,
ToKeyId1 = att1.ToKeyId,
AttachSource1 = att1.AttachSource,
AttachUrl1 = att1.AttachUrl,
}).ToList();
if (dataList.Count() > 0)
{
var thisUnit = CommonService.GetIsThisUnit();
var porject = BLL.ProjectService.GetProjectByProjectId(projectId);
var pushData = new LicenseManagerData
{
CollCropCode = thisUnit.CollCropCode,//分包单位社会统一信用码
UnitId = thisUnit.UnitId,//分包单位Id
UnitName = thisUnit.UnitName,//分包单位名称
ShortUnitName = thisUnit.ShortUnitName,//分包单位简称
UnitDomain = Funs.SGGLUrl,//分包单位域名地址【文件存储地址】
SubjectUnit = porject.SubjectUnit,//主包单位Id
SubjectProject = porject.SubjectProject,//主包项目Id
Items = dataList//数据
};
var pushContent = JsonConvert.SerializeObject(pushData);
//获取总包单位接口apiurl地址
var Url = BLL.UnitService.getUnitApiUrlByUnitId(porject.SubjectUnit);
var ApiUrl = string.Empty;
var WebUrl = string.Empty;
if (Url != null)
{
var urls = Url.Split(',');
ApiUrl = urls[0];
if (urls.Length > 1)
{
WebUrl = urls[1];
}
}
var baseurl = $"{ApiUrl}/api/LicenseSync/ReceiveSaveProjectLicenseManagerData";
string contenttype = "application/json;charset=unicode";
//Hashtable newToken = new Hashtable
//{
// { "token", ServerService.GetToken().Token }
//};
//ErrLogInfo.WriteLog($"【班前会推送数据】接口地址:{baseurl}{pushContent}");
var returndata = APIGetHttpService.Http(baseurl, "Post", contenttype, null, pushContent);
if (!string.IsNullOrEmpty(returndata))
{
ErrLogInfo.WriteLog($"【作业票返回结果】接口地址:{baseurl}{returndata}");
JObject obj = JObject.Parse(returndata);
string mess = obj["message"].ToString();
string code = obj["code"].ToString();
}
}
else
{
responeData.message = "当前项目没有作业票定稿数据";
}
}
catch (Exception ex)
{
responeData.message = "同步到总包单位失败!";
ErrLogInfo.WriteLog("【作业票定稿】同步到总包单位失败!", ex);
}
}
return responeData;
}
#endregion
#region
/// <summary>
/// 总包单位接收保存分包单位推送的作业票定稿数据
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static string ReceiveSaveProjectLicenseManagerData(LicenseManagerData data)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
string result = string.Empty;
if (data.Items.Count() > 0)
{
//var jsonData = JsonConvert.SerializeObject(data);
//ErrLogInfo.WriteLog($"【作业票定稿接收数据】{jsonData}");
//1、判断分包单位是否存在
var unit = UnitService.getUnitByCollCropCodeUnitName(data.CollCropCode, data.UnitName);
if (unit == null)
{
result = "总包单位不存在本单位,请登录总包系统检查维护本单位信息!";
}
else
{
//2、判断主包项目是否存在
var porject = BLL.ProjectService.GetProjectByProjectId(data.SubjectProject);
if (porject == null)
{
result = "总包单位不存在本项目,请检查总包项目关联是否正确!";
}
else
{
int succ = 0;
//3、保存数据
foreach (var item in data.Items)
{
try
{
var model = db.License_LicenseManager.FirstOrDefault(e => e.LicenseManagerId == item.LicenseManagerId);
if (model != null)
{//编辑
model.ProjectId = data.SubjectProject;
model.UnitId = unit.UnitId;
model.LicenseManagerCode = item.LicenseManagerCode;
model.LicenseManageName = item.LicenseManageName;
//model.LicenseTypeId = item.LicenseTypeId;
model.LicenseTypeId = APIDataShareSyncService.GetLicenseTypeId(item.LicenseTypeId, item.LicenseTypeCode, item.LicenseTypeName);
//model.LicenseManageContents = HttpUtility.HtmlEncode(item.LicenseManageContents);
model.LicenseManageContents = item.LicenseManageContents;
model.States = item.States;
model.StartDate = item.StartDate;
model.EndDate = item.EndDate;
model.ApplicantMan = item.ApplicantMan;
model.IsHighRisk = item.IsHighRisk;
model.WorkStates = item.WorkStates;
model.SourceDes = $"{(!string.IsNullOrWhiteSpace(data.ShortUnitName) ? data.ShortUnitName : data.UnitName)}#{item.CompileManName}#单位工程:{item.UnitWorkName}";
model.CompileDate = item.CompileDate;
//model.CompileMan = item.CompileMan;
db.SubmitChanges();
}
else
{//新增
Model.License_LicenseManager newModel = new Model.License_LicenseManager();
newModel.LicenseManagerId = item.LicenseManagerId;
newModel.ProjectId = data.SubjectProject;
newModel.UnitId = unit.UnitId;
newModel.LicenseManagerCode = item.LicenseManagerCode;
newModel.LicenseManageName = item.LicenseManageName;
//newModel.LicenseTypeId = item.LicenseTypeId;
newModel.LicenseTypeId = APIDataShareSyncService.GetLicenseTypeId(item.LicenseTypeId, item.LicenseTypeCode, item.LicenseTypeName);
//newModel.LicenseManageContents = HttpUtility.HtmlEncode(item.LicenseManageContents);
newModel.LicenseManageContents = item.LicenseManageContents;
newModel.States = item.States;
newModel.StartDate = item.StartDate;
newModel.EndDate = item.EndDate;
newModel.ApplicantMan = item.ApplicantMan;
newModel.IsHighRisk = item.IsHighRisk;
newModel.WorkStates = item.WorkStates;
newModel.SourceDes = $"{(!string.IsNullOrWhiteSpace(data.ShortUnitName) ? data.ShortUnitName : data.UnitName)}#{item.CompileManName}#单位工程:{item.UnitWorkName}";
newModel.CompileDate = item.CompileDate;
//newModel.CompileMan = item.CompileMan;
db.License_LicenseManager.InsertOnSubmit(newModel);
db.SubmitChanges();
}
succ++;
//ErrLogInfo.WriteLog($"【作业票定稿接收数据——内容附件】UnitDomain{data.UnitDomain}AttachFileId{item.AttachFileId}ToKeyId{item.ToKeyId}AttachSource{item.AttachSource}AttachUrl{item.AttachUrl}");
//附件处理:附件
BLL.FileInsertService.SaveAttachFileRecords(data.UnitDomain, item.AttachFileId, item.ToKeyId, item.AttachSource, item.AttachUrl);
//附件处理:关闭附件
BLL.FileInsertService.SaveAttachFileRecords(data.UnitDomain, item.AttachFileId1, item.ToKeyId1, item.AttachSource1, item.AttachUrl1);
}
catch (Exception ex)
{
BLL.ErrLogInfo.WriteLog($"【{porject.ProjectName}】作业票定稿数据推送总包失败", ex.Message);
continue;
}
}
result = $"推送成功:总数{data.Items.Count()}条,成功{succ}条";
}
}
}
else
{
result = "推送数据对象为空!";
}
return result;
}
}
#endregion
}
}
@@ -0,0 +1,277 @@
using Model;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Linq;
namespace BLL
{
/// <summary>
/// 安全会议数据共享互通
/// </summary>
public class APIMeetingSyncService
{
#region
/// <summary>
/// 推送分包班前会数据
/// </summary>
/// <param name="projectId">项目Id</param>
/// <param name="dataId">班前会数据Id(为空的时候推送全部)</param>
/// <returns></returns>
public static ReturnData PushClassMeetingLists(string projectId, string dataId = "")
{
Model.ReturnData responeData = new Model.ReturnData();
responeData.code = 0;
responeData.message = string.Empty;
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
try
{
var list = from x in db.Meeting_ClassMeeting where x.ProjectId == projectId select x;
if (!string.IsNullOrWhiteSpace(dataId))
{
list = list.Where(x => x.ClassMeetingId == dataId);
}
var dataList = (from x in list
join ptg in db.ProjectData_TeamGroup on x.TeamGroupId equals ptg.TeamGroupId into ptGroup
from ptg in ptGroup.DefaultIfEmpty()
join su in db.Person_Persons on x.CompileMan equals su.PersonId into sUser
from su in sUser.DefaultIfEmpty()
join att in db.AttachFile on x.ClassMeetingId equals att.ToKeyId into attTemp
from att in attTemp.DefaultIfEmpty()
join att1 in db.AttachFile on (x.ClassMeetingId + "#1") equals att1.ToKeyId into att1Temp
from att1 in att1Temp.DefaultIfEmpty()
join att2 in db.AttachFile on (x.ClassMeetingId + "#2") equals att2.ToKeyId into att2Temp
from att2 in att2Temp.DefaultIfEmpty()
orderby x.CompileDate descending
select new ClassMeetingItem
{
ProjectId = x.ProjectId,
UnitId = x.UnitId,
ClassMeetingId = x.ClassMeetingId,
ClassMeetingCode = x.ClassMeetingCode,
ClassMeetingName = x.ClassMeetingName,
ClassMeetingDate = x.ClassMeetingDate,
ClassMeetingContents = x.ClassMeetingContents,
CompileMan = x.CompileMan,
CompileManName = su.PersonName,
TeamGroupId = x.TeamGroupId,
TeamGroupName = ptg.TeamGroupName,
CompileDate = x.CompileDate,
States = x.States,
MeetingPlace = x.MeetingPlace,
MeetingHours = x.MeetingHours,
MeetingHostMan = x.MeetingHostMan,
AttentPerson = x.AttentPerson,
AttentPersonNum = x.AttentPersonNum,
//MeetingHostManOther = x.MeetingHostManOther,
MeetingHostManOther = string.Empty,
Remark = x.Remark,
//AttachUrl = AttachFileService.getFileUrl(x.ClassMeetingId),//内容
//AttachUrl1 = AttachFileService.getFileUrl(x.ClassMeetingId + "#1"),//签到表
//AttachUrl2 = AttachFileService.getFileUrl(x.ClassMeetingId + "#2"),//会议过程
AttachFileId = att.AttachFileId,
ToKeyId = att.ToKeyId,
AttachSource = att.AttachSource,
AttachUrl = att.AttachUrl,
AttachFileId1 = att1.AttachFileId,
ToKeyId1 = att1.ToKeyId,
AttachSource1 = att1.AttachSource,
AttachUrl1 = att1.AttachUrl,
AttachFileId2 = att2.AttachFileId,
ToKeyId2 = att2.ToKeyId,
AttachSource2 = att2.AttachSource,
AttachUrl2 = att2.AttachUrl,
}).ToList();
if (dataList.Count() > 0)
{
var thisUnit = CommonService.GetIsThisUnit();
var porject = BLL.ProjectService.GetProjectByProjectId(projectId);
var pushData = new ClassMeetingData
{
CollCropCode = thisUnit.CollCropCode,//分包单位社会统一信用码
UnitId = thisUnit.UnitId,//分包单位Id
UnitName = thisUnit.UnitName,//分包单位名称
ShortUnitName = thisUnit.ShortUnitName,//分包单位简称
UnitDomain = Funs.SGGLUrl,//分包单位域名地址【文件存储地址】
SubjectUnit = porject.SubjectUnit,//主包单位Id
SubjectProject = porject.SubjectProject,//主包项目Id
Items = dataList//会议数据
};
var pushContent = JsonConvert.SerializeObject(pushData);
//获取总包单位接口apiurl地址
var Url = BLL.UnitService.getUnitApiUrlByUnitId(porject.SubjectUnit);
var ApiUrl = string.Empty;
var WebUrl = string.Empty;
if (Url != null)
{
var urls = Url.Split(',');
ApiUrl = urls[0];
if (urls.Length > 1)
{
WebUrl = urls[1];
}
}
var baseurl = $"{ApiUrl}/api/MeetingSync/ReceiveSaveProjectClassMeetingData";
string contenttype = "application/json;charset=unicode";
//Hashtable newToken = new Hashtable
//{
// { "token", ServerService.GetToken().Token }
//};
ErrLogInfo.WriteLog($"【班前会推送数据】接口地址:{baseurl}{pushContent}");
var returndata = APIGetHttpService.Http(baseurl, "Post", contenttype, null, pushContent);
if (!string.IsNullOrEmpty(returndata))
{
ErrLogInfo.WriteLog($"【班前会返回结果】接口地址:{baseurl}{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.message = "当前项目没有班前会数据";
}
}
catch (Exception ex)
{
responeData.message = "同步到总包单位失败!";
ErrLogInfo.WriteLog("【班前会】同步到总包单位失败!", ex);
}
}
return responeData;
}
#endregion
#region
/// <summary>
/// 总包单位接收保存分包单位推送的班前会数据
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static string ReceiveSaveProjectClassMeetingData(ClassMeetingData data)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
string result = string.Empty;
if (data.Items.Count() > 0)
{
//1、判断分包单位是否存在
var unit = UnitService.getUnitByCollCropCodeUnitName(data.CollCropCode, data.UnitName);
if (unit == null)
{
result = "总包单位不存在本单位,请登录总包系统检查维护本单位信息!";
}
else
{
//2、判断主包项目是否存在
var porject = BLL.ProjectService.GetProjectByProjectId(data.SubjectProject);
if (porject == null)
{
result = "总包单位不存在本项目,请检查总包项目关联是否正确!";
}
else
{
int succ = 0;
//3、保存数据
foreach (var item in data.Items)
{
try
{
var model = db.Meeting_ClassMeeting.FirstOrDefault(e => e.ClassMeetingId == item.ClassMeetingId);
if (model != null)
{//编辑
model.ProjectId = data.SubjectProject;
model.UnitId = unit.UnitId;
model.ClassMeetingCode = item.ClassMeetingCode;
model.ClassMeetingName = item.ClassMeetingName;
model.ClassMeetingDate = item.ClassMeetingDate;
model.AttentPersonNum = item.AttentPersonNum;
//model.TeamGroupId = item.TeamGroupId;
model.TeamGroupId = APIDataShareSyncService.GetTeamGroupId(item.TeamGroupName, data.SubjectProject, unit.UnitId);
model.AttentPersonNum = item.AttentPersonNum;
//model.ClassMeetingContents = HttpUtility.HtmlEncode(item.ClassMeetingContents);
model.ClassMeetingContents = item.ClassMeetingContents;
//model.States = item.States;
model.States = BLL.Const.State_2; ;//分包推送过来的班前会数据默认已完成
model.MeetingPlace = item.MeetingPlace;
model.MeetingHours = item.MeetingHours;
model.MeetingHostMan = item.MeetingHostMan;
model.AttentPerson = item.AttentPerson;
model.AttentPersonNum = item.AttentPersonNum;
//model.MeetingHostManOther = item.MeetingHostManOther;
//model.Remark = item.Remark;
model.Remark = $"{(!string.IsNullOrWhiteSpace(data.ShortUnitName) ? data.ShortUnitName : data.UnitName)}#{item.CompileManName}";
model.CompileDate = item.CompileDate;
model.CompileMan = item.CompileMan;
db.SubmitChanges();
}
else
{//新增
Model.Meeting_ClassMeeting newModel = new Model.Meeting_ClassMeeting();
newModel.ClassMeetingId = item.ClassMeetingId;
newModel.ProjectId = data.SubjectProject;
newModel.UnitId = unit.UnitId;
newModel.ClassMeetingCode = item.ClassMeetingCode;
newModel.ClassMeetingName = item.ClassMeetingName;
newModel.ClassMeetingDate = item.ClassMeetingDate;
newModel.AttentPersonNum = item.AttentPersonNum;
//newModel.TeamGroupId = item.TeamGroupId;
newModel.TeamGroupId = APIDataShareSyncService.GetTeamGroupId(item.TeamGroupName, data.SubjectProject, unit.UnitId);
newModel.AttentPersonNum = item.AttentPersonNum;
//newModel.ClassMeetingContents = HttpUtility.HtmlEncode(item.ClassMeetingContents);
newModel.ClassMeetingContents = item.ClassMeetingContents;
//newModel.States = item.States;
newModel.States = BLL.Const.State_2; ;//分包推送过来的班前会数据默认已完成
newModel.MeetingPlace = item.MeetingPlace;
newModel.MeetingHours = item.MeetingHours;
newModel.MeetingHostMan = item.MeetingHostMan;
newModel.AttentPerson = item.AttentPerson;
newModel.AttentPersonNum = item.AttentPersonNum;
//newModel.MeetingHostManOther = item.MeetingHostManOther;
//newModel.Remark = item.Remark;
newModel.Remark = $"{(!string.IsNullOrWhiteSpace(data.ShortUnitName) ? data.ShortUnitName : data.UnitName)}#{item.CompileManName}";
newModel.CompileDate = item.CompileDate;
newModel.CompileMan = item.CompileMan;
db.Meeting_ClassMeeting.InsertOnSubmit(newModel);
db.SubmitChanges();
}
succ++;
//附件处理:内容附件
BLL.FileInsertService.SaveAttachFileRecords(data.UnitDomain, item.AttachFileId, item.ToKeyId, item.AttachSource, item.AttachUrl);
//附件处理:签到表
BLL.FileInsertService.SaveAttachFileRecords(data.UnitDomain, item.AttachFileId1, item.ToKeyId1, item.AttachSource1, item.AttachUrl1);
//附件处理:会议过程
BLL.FileInsertService.SaveAttachFileRecords(data.UnitDomain, item.AttachFileId2, item.ToKeyId2, item.AttachSource2, item.AttachUrl2);
}
catch (Exception ex)
{
BLL.ErrLogInfo.WriteLog($"【{porject.ProjectName}】班前会数据推送总包失败", ex.Message);
continue;
}
}
result = $"推送成功:总数{data.Items.Count()}条,成功{succ}条";
}
}
}
else
{
result = "推送数据对象为空!";
}
return result;
}
}
#endregion
}
}
@@ -0,0 +1,575 @@
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.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 IdentityCard = item.IdentityCard;
var model = db.SitePerson_Person.FirstOrDefault(e => e.IdentityCard == IdentityCard && e.ProjectId == projectId);
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
}
}
@@ -200,5 +200,15 @@ namespace BLL
db.SubmitChanges();
}
}
/// <summary>
/// 根据主键获取特殊岗位人员资质
/// </summary>
/// <param name="personQualityId"></param>
/// <returns></returns>
public static Model.QualityAudit_PersonQuality GetPersonQualityByPersonId(string personId)
{
return Funs.DB.QualityAudit_PersonQuality.FirstOrDefault(e => e.PersonId == personId);
}
}
}
@@ -0,0 +1,72 @@
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
namespace BLL
{
public class TemporaryElectricityService
{
/// <summary>
/// 获取临时用电方案信息
/// </summary>
/// <param name="UnitWorkId"></param>
/// <returns></returns>
public static Model.Solution_TemporaryElectricity GetTemporaryElectricityByTemporaryElectricityId(string TemporaryElectricityId)
{
return Funs.DB.Solution_TemporaryElectricity.FirstOrDefault(e => e.TemporaryElectricityId == TemporaryElectricityId);
}
/// <summary>
/// 添加临时用电方案信息
/// </summary>
/// <param name="model"></param>
public static void AddTemporaryElectricity(Model.Solution_TemporaryElectricity TemporaryElectricity)
{
Model.SGGLDB db = Funs.DB;
Model.Solution_TemporaryElectricity newTemporaryElectricity = new Model.Solution_TemporaryElectricity();
newTemporaryElectricity.TemporaryElectricityId = TemporaryElectricity.TemporaryElectricityId;
newTemporaryElectricity.ProjectId = TemporaryElectricity.ProjectId;
newTemporaryElectricity.Code = TemporaryElectricity.Code;
newTemporaryElectricity.Name = TemporaryElectricity.Name;
newTemporaryElectricity.Content = TemporaryElectricity.Content;
newTemporaryElectricity.Remark = TemporaryElectricity.Remark;
newTemporaryElectricity.CompileMan = TemporaryElectricity.CompileMan;
newTemporaryElectricity.CompileDate = TemporaryElectricity.CompileDate;
db.Solution_TemporaryElectricity.InsertOnSubmit(newTemporaryElectricity);
db.SubmitChanges();
}
/// <summary>
/// 修改临时用电方案信息
/// </summary>
/// <param name="model"></param>
public static void UpdateTemporaryElectricity(Model.Solution_TemporaryElectricity TemporaryElectricity)
{
Model.SGGLDB db = Funs.DB;
Model.Solution_TemporaryElectricity newTemporaryElectricity = db.Solution_TemporaryElectricity.FirstOrDefault(e => e.TemporaryElectricityId == TemporaryElectricity.TemporaryElectricityId);
if (newTemporaryElectricity != null)
{
newTemporaryElectricity.Code = TemporaryElectricity.Code;
newTemporaryElectricity.Name = TemporaryElectricity.Name;
newTemporaryElectricity.Content = TemporaryElectricity.Content;
newTemporaryElectricity.Remark = TemporaryElectricity.Remark;
newTemporaryElectricity.CompileMan = TemporaryElectricity.CompileMan;
newTemporaryElectricity.CompileDate = TemporaryElectricity.CompileDate;
db.SubmitChanges();
}
}
/// <summary>
/// 根据主键删除临时用电方案信息
/// </summary>
/// <param name="checkerId"></param>
public static void DeleteTemporaryElectricityById(string TemporaryElectricityId)
{
Model.SGGLDB db = Funs.DB;
Model.Solution_TemporaryElectricity TemporaryElectricity = db.Solution_TemporaryElectricity.FirstOrDefault(e => e.TemporaryElectricityId == TemporaryElectricityId);
if (TemporaryElectricity != null)
{
db.Solution_TemporaryElectricity.DeleteOnSubmit(TemporaryElectricity);
db.SubmitChanges();
}
}
}
}
+108 -53
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
@@ -19,35 +20,45 @@ namespace BLL
{
List<byte[]> bytes = new List<byte[]>();
var strs = attachUrl.Trim().Split(',');
try
{
foreach (var fileUrl in strs)
{
string filepath = $"{fileHost}{fileUrl}";
// 创建WebClient实例
using (WebClient webClient = new WebClient())
string path = ConfigurationManager.AppSettings["localRoot"] + fileUrl;
if (!File.Exists(path))
{
// 下载图片并保存到内存流
using (MemoryStream ms = new MemoryStream(webClient.DownloadData(filepath)))
//BLL.ErrLogInfo.WriteLog($"不存在则新增,附件地址:{path}");
string filepath = $"{fileHost}{fileUrl}";
//BLL.ErrLogInfo.WriteLog($"不存在则新增,责任单位附件地址:{filepath}");
// 创建WebClient实例
using (WebClient webClient = new WebClient())
{
// 将MemoryStream转换为byte数组
byte[] imageBytes = ms.ToArray();
bytes.Add(imageBytes);
//// 使用byte数组(例如,保存到文件或进行其他处理)
//File.WriteAllBytes("localImage.jpg", imageBytes);
// 下载图片并保存到内存流
using (MemoryStream ms = new MemoryStream(webClient.DownloadData(filepath)))
{
// 将MemoryStream转换为byte数组
byte[] imageBytes = ms.ToArray();
bytes.Add(imageBytes);
//// 使用byte数组(例如,保存到文件或进行其他处理)
//File.WriteAllBytes("localImage.jpg", imageBytes);
}
}
}
//else
//{
// BLL.ErrLogInfo.WriteLog($"已存在附件地址:{path}");
//}
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
BLL.ErrLogInfo.WriteLog($"服务器图片转换异常:{fileHost};图片地址:{attachUrl}", ex.Message);
}
return bytes;
}
/// <summary>
/// 获取附件数据流类
/// </summary>
@@ -89,55 +100,38 @@ namespace BLL
/// <returns></returns>
public static void FileMoreInsert(List<byte[]> fileContextList, string attachUrl)
{
if (fileContextList != null && fileContextList.Count() > 0)
if (fileContextList.Count > 0)
{
if (fileContextList.Count > 0)
string[] strs = attachUrl.Trim().Split(',');
int i = 0;
string physicalpath = ConfigurationManager.AppSettings["localRoot"];
foreach (var item in fileContextList)
{
string[] strs = attachUrl.Trim().Split(',');
int i = 0;
foreach (var item in fileContextList)
//HttpContext.Current.Request.PhysicalApplicationPath;
string fullPath = (physicalpath + strs[i]).Replace('/', '\\');
if (!File.Exists(fullPath))
{
if (strs.Count() > i)
byte[] fileContext = item;
int index = fullPath.LastIndexOf("\\");
string filePath = fullPath.Substring(0, index);
if (!Directory.Exists(filePath))
{
string physicalpath = Funs.AttachRootPath;
string fpath = strs[i];
string fullPath = physicalpath + fpath;
if (!File.Exists(fullPath))
{
byte[] fileContext = item;
string fileName = Regex.Match(fullPath, @"[^/\\?]+(\?.*)?$").Value;
string filePath = fullPath.Replace(fileName, "");
//int index = fullPath.LastIndexOf("\\");
//string filePath = fullPath.Substring(0, index) ;
//string filePath = index > 0 ? fullPath.Substring(0, index) : fullPath;
Directory.CreateDirectory(filePath);
}
//string savePath = fullPath + fileName;
try
{
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
}
catch (Exception ex)
{
ErrLogInfo.WriteLog($"附件【{filePath}】获取异常!");
//continue;
}
//string savePath = fullPath + fileName;
//文件读写模式
System.IO.FileMode fileMode = System.IO.FileMode.Create;
//文件读写模式
System.IO.FileMode fileMode = System.IO.FileMode.Create;
//写入文件
using (System.IO.FileStream fs = new System.IO.FileStream(fullPath, fileMode, System.IO.FileAccess.Write))
{
fs.Write(fileContext, 0, fileContext.Length);
}
}
i++;
//写入文件
using (System.IO.FileStream fs = new System.IO.FileStream(fullPath, fileMode, System.IO.FileAccess.Write))
{
fs.Write(fileContext, 0, fileContext.Length);
}
}
i++;
}
}
}
@@ -223,5 +217,66 @@ namespace BLL
}
}
/// <summary>
/// 保存其他单位附件同步处理
/// </summary>
/// <param name="domain">单位域名地址</param>
/// <param name="attachFileId">附件id</param>
/// <param name="tokeyId">附件keyid</param>
/// <param name="attachSource">附件json信息</param>
/// <param name="attachUrl">附件地址</param>
public static void SaveAttachFileRecords(string domain, string attachFileId, string tokeyId, string attachSource, string attachUrl)
{
if (!string.IsNullOrEmpty(attachFileId) && !string.IsNullOrEmpty(attachSource) && !string.IsNullOrEmpty(attachUrl))
{
List<byte[]> FileContext = new List<byte[]>();
if (!string.IsNullOrWhiteSpace(domain) && !string.IsNullOrWhiteSpace(attachUrl))
{
FileContext = FilePathTransStream(domain, attachUrl);
}
InsertAttachFilesRecord(attachFileId, tokeyId, attachSource, attachUrl, FileContext);
}
}
/// <summary>
/// 数据和附件插入到多附件表
/// </summary>
public static void InsertAttachFilesRecord(string attachFileId, string dataId, string attachSource, string attachUrl, List<byte[]> fileContext)
{
if (!string.IsNullOrEmpty(attachFileId))
{
//多附件
var attachFile = Funs.DB.AttachFile.FirstOrDefault(x => x.ToKeyId == dataId);
if (attachFile == null)
{
////插入附件文件
BLL.FileInsertService.FileMoreInsert(fileContext, attachUrl);
Model.AttachFile newAttachFile = new Model.AttachFile
{
AttachFileId = attachFileId,
ToKeyId = dataId,
AttachSource = attachSource,
AttachUrl = attachUrl
};
Funs.DB.AttachFile.InsertOnSubmit(newAttachFile);
Funs.DB.SubmitChanges();
}
else
{
if (attachFile.AttachUrl != attachUrl)
{
/////删除附件文件
//BLL.UploadAttachmentService.DeleteFile(ConfigurationManager.AppSettings["localRoot"], attachFile.AttachUrl);
////插入附件文件
BLL.FileInsertService.FileMoreInsert(fileContext, attachUrl);
attachFile.AttachSource = attachSource;
attachFile.AttachUrl = attachUrl;
Funs.DB.SubmitChanges();
}
}
}
}
}
}
+85
View File
@@ -1482,5 +1482,90 @@ namespace BLL
return list;
}
}
/// <summary>
/// 用户下拉框
/// </summary>
/// <param name="dropName">下拉框名字</param>
/// <param name="projectId">项目id</param>
/// <param name="isShowPlease">是否显示请选择</param>
public static void InitUserDropDownList(FineUIPro.DropDownList dropName, string projectId, bool isShowPlease, string UnitId)
{
dropName.DataValueField = "Value";
dropName.DataTextField = "Text";
if (!string.IsNullOrWhiteSpace(UnitId))
{
dropName.DataSource = GetUserByUnitId(projectId, UnitId);
}
else
{
dropName.DataSource = GetMainUserList(projectId);
}
dropName.DataBind();
if (isShowPlease)
{
Funs.FineUIPleaseSelect(dropName);
}
}
/// <summary>
/// 获取项目总包用户
/// </summary>
/// <param name="projectId"></param>
/// <returns></returns>
public static ListItem[] GetMainUserList(string projectId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
//var user = (from x in db.Sys_User
// join y in db.Project_ProjectUser on x.UserId equals y.UserId
// join z in db.Project_ProjectUnit on x.UnitId equals z.UnitId
// where x.IsPost == true && y.ProjectId == projectId && z.ProjectId == projectId && z.UnitType == Const.ProjectUnitType_1
// orderby x.UserId
// select x).ToList();
var user = (from x in db.SitePerson_Person
join y in db.Person_Persons on x.PersonId equals y.PersonId
join z in db.Project_ProjectUnit on x.UnitId equals z.UnitId
where y.IsPost == true && x.ProjectId == projectId && z.ProjectId == projectId && z.UnitType == Const.ProjectUnitType_1 && x.RoleIds != null && x.RoleIds != string.Empty
orderby x.PersonId
select new
{
UserName = y.PersonName,
UserId = x.PersonId
}).Distinct().ToList();
ListItem[] lis = new ListItem[user.Count()];
for (int i = 0; i < user.Count(); i++)
{
lis[i] = new ListItem(user[i].UserName ?? "", user[i].UserId.ToString());
}
return lis;
}
}
/// <summary>
/// 获取在岗用户下拉选项
/// </summary>
/// <returns></returns>
public static List<Model.Person_Persons> GetProjectUserListByProjectId(string projectId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var users = (from x in db.Person_Persons
where x.IsPost == true && x.PersonId != Const.hfnbdId && x.PersonId != Const.sedinId && x.RoleIds != null && x.RoleIds != string.Empty
orderby x.PersonName
select x).ToList();
if (!string.IsNullOrEmpty(projectId))
{
users = (from x in users
join y in db.SitePerson_Person on x.PersonId equals y.PersonId
where y.ProjectId == projectId
orderby x.PersonName
select x).ToList();
}
return users;
}
}
}
}
+55
View File
@@ -127,6 +127,9 @@
ProjectRealCode = project.ProjectRealCode,
IsCNCECShow = project.IsCNCECShow,
MasterSysId = project.MasterSysId,
SubjectUnit = project.SubjectUnit,
SubjectProject = project.SubjectProject,
};
db.Base_Project.InsertOnSubmit(newProject);
db.SubmitChanges();
@@ -174,6 +177,8 @@
newProject.ProjectRealCode = project.ProjectRealCode;
newProject.IsCNCECShow = project.IsCNCECShow;
newProject.MasterSysId = project.MasterSysId;
newProject.SubjectUnit = project.SubjectUnit;
newProject.SubjectProject = project.SubjectProject;
db.SubmitChanges();
HSEDataCollectService.ProjectHSEDataCollectSubmission(newProject);
@@ -731,5 +736,55 @@
Funs.FineUIPleaseSelect(dropName);
}
}
/// <summary>
/// 项目表下拉框
/// </summary>
/// <param name="dropName">下拉框名字</param>
/// <param name="isShowPlease">是否显示请选择</param>
public static void InitProjectDropDownList(FineUIPro.DropDownList dropName, string unitId, bool isShowPlease)
{
var IsThisUnit = BLL.Const.UnitId_SEDIN == unitId ? true : false;
dropName.DataValueField = "ProjectId";
dropName.DataTextField = "ProjectName";
if (IsThisUnit)
{
dropName.DataSource = BLL.ProjectService.GetProjectWorkList();
}
else
{
dropName.DataSource = BLL.ProjectService.GetProjectWorkList(unitId);
}
dropName.DataBind();
if (isShowPlease)
{
Funs.FineUIPleaseSelect(dropName);
}
}
/// <summary>
/// 获取施工中项目集合
/// </summary>
/// <returns></returns>
public static List<Model.Base_Project> GetProjectWorkList(string unitId)
{
var getDatas = from x in Funs.DB.Base_Project
where (x.ProjectState == null || x.ProjectState == BLL.Const.ProjectState_1)
select x;
if (unitId == BLL.Const.UnitId_SEDIN)
{
getDatas = getDatas.Where(x => x.UnitId == unitId || x.UnitId == null);
}
else
{
getDatas = getDatas.Where(x => x.UnitId == unitId);
}
var list = getDatas.OrderBy(x => x.ProjectName).ToList();
return list;
}
}
}
+34
View File
@@ -422,6 +422,40 @@ namespace BLL
}
}
/// <summary>
/// 执行SQL语句
/// </summary>
/// <param name="sql">sql语句</param>
public static bool ExecuteSql(string sql)
{
bool result = false;
using (SqlConnection Connection = new SqlConnection(connectionString))
{
try
{
result = true;
Connection.Open();
SqlCommand command = new SqlCommand(sql, Connection)
{
CommandTimeout = 0,
CommandType = CommandType.Text
};
command.ExecuteNonQuery();
}
catch (Exception ex)
{
result = false;
ErrLogInfo.WriteLog($"【执行SQL语句报错】{sql};【错误信息】{ex.Message}");
}
finally
{
Connection.Close();
}
return result;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// Creates a DataSet by running the stored procedure and placing the results
+185
View File
@@ -1,5 +1,7 @@
using Model;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
@@ -825,5 +827,188 @@ namespace BLL
Funs.FineUIPleaseSelect(dropName);
}
}
#region
/// <summary>
/// 获取集团单位列表
/// </summary>
/// <returns></returns>
public static List<Model.BaseInfoItem> getUnitLists()
{
var responeData = new Model.ResponeData();
List<Model.BaseInfoItem> list = new List<Model.BaseInfoItem>();
try
{
string baseurl = $"{SysConstSetService.CNCECPath}/api/Unit/getUnitLists";
// string baseurl = "http://localhost:7143/api/Unit/getUnitLists";
string contenttype = "application/json;charset=unicode";
Hashtable newToken = new Hashtable
{
{ "token", ServerService.GetToken().Token }
};
var strJosn = APIGetHttpService.Http(baseurl, "GET", contenttype, newToken, null);
if (!string.IsNullOrEmpty(strJosn))
{
JObject obj = JObject.Parse(strJosn);
responeData.code = Funs.GetNewIntOrZero(obj["code"].ToString());
responeData.message = obj["message"].ToString();
if (responeData.code == 1)
{
JArray getData = JArray.Parse(obj["data"].ToString());
if (getData.Count() > 0)
{
foreach (var item in getData)
{
var q = new Model.BaseInfoItem();
q.BaseInfoId = item["BaseInfoId"].ToString();
q.BaseInfoName = item["BaseInfoName"].ToString();
q.BaseInfoCode = item["BaseInfoCode"].ToString();
list.Add(q);
}
}
responeData.message = "获取成功:集团单位数" + getData.Count().ToString() + "条";
}
}
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = "获取失败:" + ex.Message;
ErrLogInfo.WriteLog("获取集团单位列表!", ex);
}
return list;
}
#endregion
#region
/// <summary>
/// 获取集团单位列表
/// </summary>
/// <returns></returns>
public static List<Model.BaseInfoItem> getProjectListByUnitId(string userId)
{
var responeData = new Model.ResponeData();
List<Model.BaseInfoItem> list = new List<Model.BaseInfoItem>();
try
{
string baseurl = $"{SysConstSetService.CNCECPath}/api/Unit/getProjectListByUnitId?unitId=" + userId + "&projectName=" + "&pageIndex=0";
// string baseurl = "http://localhost:7143/api/Unit/getProjectListByUnitId?unitId=" + userId + "&projectName=" + "&pageIndex=0" ;
string contenttype = "application/json;charset=unicode";
Hashtable newToken = new Hashtable
{
{ "token", ServerService.GetToken().Token }
};
var strJosn = APIGetHttpService.Http(baseurl, "GET", contenttype, newToken, null);
if (!string.IsNullOrEmpty(strJosn))
{
JObject obj = JObject.Parse(strJosn);
responeData.code = Funs.GetNewIntOrZero(obj["code"].ToString());
responeData.message = obj["message"].ToString();
if (responeData.code == 1)
{
JArray getData = JArray.Parse(obj["data"].ToString());
if (getData.Count() > 0)
{
foreach (var item in getData)
{
var q = new Model.BaseInfoItem();
q.BaseInfoId = item["BaseInfoId"].ToString();
q.BaseInfoName = item["BaseInfoName"].ToString();
q.BaseInfoCode = item["BaseInfoCode"].ToString();
list.Add(q);
}
}
responeData.message = "获取成功:集团项目数" + getData.Count().ToString() + "条";
}
}
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = "获取失败:" + ex.Message;
ErrLogInfo.WriteLog("获取集团项目数!", ex);
}
return list;
}
#endregion
#region id获取单位信息列表
/// <summary>
/// 获取集团单位列表
/// </summary>
/// <returns></returns>
public static string getUnitApiUrlByUnitId(string userId)
{
string url = "";
try
{
string baseurl = $"{SysConstSetService.CNCECPath}/api/Unit/getUnitApiUrlByUnitId?unitId=" + userId;
// string baseurl = "http://localhost:7143/api/Unit/getUnitApiUrlByUnitId?unitId=" + userId;
string contenttype = "application/json;charset=unicode";
Hashtable newToken = new Hashtable
{
{ "token", ServerService.GetToken().Token }
};
var strJosn = APIGetHttpService.Http(baseurl, "GET", contenttype, newToken, null);
if (!string.IsNullOrEmpty(strJosn))
{
JObject obj = JObject.Parse(strJosn);
if (Funs.GetNewIntOrZero(obj["code"].ToString()) == 1)
{
if (obj["data"] != null)
{
JObject dataObj = obj["data"] as JObject;
if (dataObj != null && dataObj["BaseInfoCode"] != null)
{
url = dataObj["BaseInfoCode"].ToString();
}
}
}
}
}
catch (Exception ex)
{
ErrLogInfo.WriteLog("获取失败!", ex);
}
return url;
}
#endregion
/// <summary>
/// 获取分公司表下拉框
/// </summary>
/// <param name="dropName"></param>
/// <param name="isShowPlease"></param>
public static void InitBranchUnitDropDownList(FineUIPro.DropDownList dropName, bool isShowPlease)
{
dropName.DataValueField = "UnitId";
dropName.DataTextField = "UnitName";
dropName.DataSource = BLL.UnitService.GetMainAndSubUnitList();
dropName.DataBind();
if (isShowPlease)
{
Funs.FineUIPleaseSelect(dropName);
}
}
/// <summary>
/// 获取当前单位下分公司拉选项
/// </summary>
/// <returns></returns>
public static List<Model.Base_Unit> GetMainAndSubUnitList()
{
return (from x in Funs.DB.Base_Unit where x.UnitId == BLL.Const.UnitId_SEDIN || x.IsBranch == true select x).ToList();
}
}
}
@@ -0,0 +1,338 @@
using System;
using Model;
using System.Collections.Generic;
using System.Linq;
namespace BLL
{
/// <summary>
/// 企业级检查明细服务
/// </summary>
public static class UnitHazardRegisterItemService
{
#region Methods
/// <summary>
/// 添加明细记录
/// </summary>
/// <param name="item">明细记录</param>
public static void AddUnitHazardRegisterItem(Model.Supervise_UnitHazardRegisterItem item)
{
Funs.DB.Supervise_UnitHazardRegisterItem.InsertOnSubmit(item);
Funs.DB.SubmitChanges();
}
/// <summary>
/// 根据主表ID删除所有明细
/// </summary>
/// <param name="registerId">主表ID</param>
public static void DeleteItemsByRegisterId(string registerId)
{
var items = (from x in Funs.DB.Supervise_UnitHazardRegisterItem
where x.UnitHazardRegisterId == registerId
select x).ToList();
if (items.Count > 0)
{
Funs.DB.Supervise_UnitHazardRegisterItem.DeleteAllOnSubmit(items);
Funs.DB.SubmitChanges();
}
}
/// <summary>
/// 删除明细记录
/// </summary>
/// <param name="itemId">明细ID</param>
public static void DeleteUnitHazardRegisterItemById(string itemId)
{
Model.Supervise_UnitHazardRegisterItem item =
Funs.DB.Supervise_UnitHazardRegisterItem.FirstOrDefault(e => e.UnitHazardRegisterItemId == itemId);
if (item != null)
{
Funs.DB.Supervise_UnitHazardRegisterItem.DeleteOnSubmit(item);
Funs.DB.SubmitChanges();
}
}
/// <summary>
/// 根据风险级别获取明细数量
/// </summary>
/// <param name="registerId">主表ID</param>
/// <param name="riskLevel">风险级别</param>
/// <returns>明细数量</returns>
public static int GetCountByRiskLevel(string registerId, string riskLevel)
{
return (from x in Funs.DB.Supervise_UnitHazardRegisterItem
where x.UnitHazardRegisterId == registerId && x.RiskLevel == riskLevel
select x).Count();
}
/// <summary>
/// 获取已完成的明细数量
/// </summary>
/// <param name="registerId">主表ID</param>
/// <returns>已完成数量</returns>
public static int GetFinishedCount(string registerId)
{
return (from x in Funs.DB.Supervise_UnitHazardRegisterItem
where x.UnitHazardRegisterId == registerId && x.CompleteStatus == 1
select x).Count();
}
/// <summary>
/// 根据主表ID获取明细列表
/// </summary>
/// <param name="registerId">主表ID</param>
/// <returns>明细列表</returns>
public static List<Model.Supervise_UnitHazardRegisterItem> GetItemsByRegisterId(string registerId)
{
return (from x in Funs.DB.Supervise_UnitHazardRegisterItem
where x.UnitHazardRegisterId == registerId
orderby x.SortIndex
select x).ToList();
}
/// <summary>
/// 获取主单的整改状态
/// </summary>
/// <param name="registerId">主单ID</param>
/// <returns>整改状态:0=全部未整改,1=部分整改,2=全部整改</returns>
public static int GetRectifyStatus(string registerId)
{
var items = GetItemsByRegisterId(registerId);
if (items.Count == 0)
{
return 0; // 无明细,视为全部未整改
}
int finishedCount = items.Count(x => x.CompleteStatus == 1);
int totalCount = items.Count;
if (finishedCount == 0)
{
return 0; // 全部未整改
}
else if (finishedCount < totalCount)
{
return 1; // 部分整改
}
else
{
return 2; // 全部整改
}
}
/// <summary>
/// 获取整改状态文本
/// </summary>
/// <param name="registerId">主单ID</param>
/// <returns>状态文本</returns>
public static string GetRectifyStatusText(string registerId)
{
int status = GetRectifyStatus(registerId);
switch (status)
{
case 0:
return "全部未整改";
case 1:
return "部分整改";
case 2:
return "全部整改";
default:
return "未知";
}
}
/// <summary>
/// 获取未完成的明细数量
/// </summary>
/// <param name="registerId">主表ID</param>
/// <returns>未完成数量</returns>
public static int GetUnfinishedCount(string registerId)
{
return (from x in Funs.DB.Supervise_UnitHazardRegisterItem
where x.UnitHazardRegisterId == registerId && (x.CompleteStatus == null || x.CompleteStatus == 0)
select x).Count();
}
/// <summary>
/// 根据明细ID获取明细记录
/// </summary>
/// <param name="itemId">明细ID</param>
/// <returns>明细记录</returns>
public static Model.Supervise_UnitHazardRegisterItem GetUnitHazardRegisterItemById(string itemId)
{
return Funs.DB.Supervise_UnitHazardRegisterItem.FirstOrDefault(e => e.UnitHazardRegisterItemId == itemId);
}
/// <summary>
/// 获取企业级检查明细列表(使用input对象,返回总数)
/// </summary>
/// <param name="input">查询条件</param>
/// <param name="pageIndex">页码(从0开始)</param>
/// <param name="pageSize">每页大小</param>
/// <param name="returnAll">是否返回所有数据(不分页)</param>
/// <param name="totalCount">总记录数</param>
/// <returns>检查明细列表</returns>
public static List<UnitHazardRegisterItemOutput> GetUnitHazardRegisterItems(
UnitHazardRegisterItemInput input,
int pageIndex,
int pageSize,
bool returnAll,
out int totalCount)
{
var db = Funs.DB;
var query = from i in db.Supervise_UnitHazardRegisterItem
join r in db.Supervise_UnitHazardRegister
on i.UnitHazardRegisterId equals r.UnitHazardRegisterId
join ct in db.Base_SuperviseCheckType
on new { MainType = r.CheckMainType, TypeCode = r.CheckType }
equals new { MainType = ct.CheckMainType, TypeCode = ct.CheckTypeCode } into ctGroup
from ct in ctGroup.DefaultIfEmpty()
join u in db.Base_Unit
on r.CheckUnitId equals u.UnitId into uGroup
from u in uGroup.DefaultIfEmpty()
join user in db.Person_Persons on r.InsResponsibleUserId equals user.PersonId into userGroup
from user in userGroup.DefaultIfEmpty()
select new UnitHazardRegisterItemOutput
{
UnitHazardRegisterItemId = i.UnitHazardRegisterItemId,
UnitHazardRegisterCode = r.UnitHazardRegisterCode,
CheckDate = r.CheckDate,
CheckMainTypeName = r.CheckMainType == "0" ? "安全" : "质量",
CheckTypeName = ct.CheckTypeName,
ProblemDescription = i.ProblemDescription,
ProblemType = i.ProblemType,
RiskLevel = i.RiskLevel,
RectifyRequirement = i.RectifyRequirement,
StatesName = UnitHazardRegisterService.ConvertState(r.States.Value),
CheckTeam = r.CheckTeam,
ProjectId = r.ProjectId,
CheckUnitName = u.UnitName,
States = r.States,
ProblemStatesName = i.CompleteStatus==1 ? "已整改":"未整改",
ProblemStates = i.CompleteStatus,
InsResponsibleUserId = r.InsResponsibleUserId,
InsResponsibleUserName= user.PersonName
};
// 应用检查大类过滤
if (input != null && !string.IsNullOrEmpty(input.CheckMainType))
{
query = query.Where(x => x.CheckMainTypeName.Contains(input.CheckMainType == "0" ? "安全" : "质量"));
}
// 项目id过滤
if (input != null && !string.IsNullOrEmpty(input.ProjectId))
{
query = query.Where(x => x.ProjectId.Contains(input.ProjectId));
}
// 检查组/人搜索
if (input != null && !string.IsNullOrEmpty(input.CheckTeam))
{
query = query.Where(x => x.CheckTeam.Contains(input.CheckTeam));
}
// 检查类别搜索
if (input != null && !string.IsNullOrEmpty(input.CheckType))
{
query = query.Where(x => x.CheckTypeName != null && x.CheckTypeName.Contains(input.CheckType));
}
// 问题描述搜索
if (input != null && !string.IsNullOrEmpty(input.Problem))
{
query = query.Where(x => x.ProblemDescription.Contains(input.Problem));
}
// 检查时间范围
if (input != null && input.StartTime.HasValue)
{
query = query.Where(x => x.CheckDate >= input.StartTime.Value);
}
if (input != null && input.EndTime.HasValue)
{
query = query.Where(x => x.CheckDate <= input.EndTime.Value);
}
// 风险级别过滤
if (input != null && !string.IsNullOrEmpty(input.RiskLevel) && input.RiskLevel != "null")
{
query = query.Where(x => x.RiskLevel == input.RiskLevel);
}
// 状态过滤
if (input != null && input.States != null)
{
query = query.Where(x => x.States == input.States);
}
// 问题整改状态过滤
if (input != null && input.ProblemStates != null)
{
query = query.Where(x => x.ProblemStates == input.ProblemStates);
}
// 单位权限过滤
if (input != null && !string.IsNullOrEmpty(input.UnitId))
{
var thisUnit = BLL.CommonService.GetIsThisUnit();
if (thisUnit.UnitId != input.UnitId)
{
// 先获取用户有权限的项目ID列表
var projectIds = (from p in Funs.DB.Base_Project
where p.UnitId == input.UnitId
select p.ProjectId).ToList();
// 过滤查询结果
query = query.Where(x => Funs.DB.Supervise_UnitHazardRegister
.Any(r => Funs.DB.Supervise_UnitHazardRegisterItem
.Any(i => i.UnitHazardRegisterItemId == x.UnitHazardRegisterItemId &&
i.UnitHazardRegisterId == r.UnitHazardRegisterId &&
projectIds.Contains(r.ProjectId))));
}
}
// 获取总数
totalCount = query.Count();
// 排序和分页
var orderedQuery = query.OrderByDescending(x => x.CheckDate);
if (returnAll)
{
return orderedQuery.ToList();
}
return orderedQuery
.Skip(pageIndex * pageSize)
.Take(pageSize)
.ToList();
}
/// <summary>
/// 更新明细记录
/// </summary>
/// <param name="item">明细记录</param>
public static void UpdateUnitHazardRegisterItem(Model.Supervise_UnitHazardRegisterItem item)
{
Model.Supervise_UnitHazardRegisterItem oldItem =
Funs.DB.Supervise_UnitHazardRegisterItem.FirstOrDefault(e => e.UnitHazardRegisterItemId == item.UnitHazardRegisterItemId);
if (oldItem != null)
{
oldItem.ProblemDescription = item.ProblemDescription;
oldItem.ProblemType = item.ProblemType;
oldItem.RiskLevel = item.RiskLevel;
oldItem.RectifyRequirement = item.RectifyRequirement;
oldItem.CompleteStatus = item.CompleteStatus;
oldItem.CompletedDate = item.CompletedDate;
oldItem.SortIndex = item.SortIndex;
Funs.DB.SubmitChanges();
}
}
#endregion Methods
}
}
@@ -0,0 +1,301 @@
using System;
using Model;
using System.Collections.Generic;
using System.Linq;
namespace BLL
{
/// <summary>
/// 企业级检查主表服务
/// </summary>
public static class UnitHazardRegisterService
{
#region Fields
public static Dictionary<string, int> StateMap = new Dictionary<string, int>
{
{ "待提交" ,(int)StateInt.},
{ "待整改" ,(int)StateInt.},
{ "部分整改" ,(int)StateInt.},
{ "已闭环" ,(int)StateInt.},
};
#endregion Fields
#region Enums
public enum StateInt : int
{
= 0,
= 1,
= 2,
= 3,
}
#endregion Enums
#region Methods
/// <summary>
/// 添加企业级检查记录
/// </summary>
/// <param name="register">企业级检查记录</param>
public static void AddUnitHazardRegister(Model.Supervise_UnitHazardRegister register)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
Model.Supervise_UnitHazardRegister newRegister = new Model.Supervise_UnitHazardRegister
{
UnitHazardRegisterId = register.UnitHazardRegisterId,
UnitHazardRegisterCode = register.UnitHazardRegisterCode,
CheckDate = register.CheckDate,
CheckMainType = register.CheckMainType,
CheckType = register.CheckType,
ProjectId = register.ProjectId,
CheckUnitId = register.CheckUnitId,
CheckTeam = register.CheckTeam,
CheckManIds = register.CheckManIds,
CheckManNames = register.CheckManNames,
InsResponsibleUserId = register.InsResponsibleUserId,
EvaluationResult = register.EvaluationResult,
AttachUrl = register.AttachUrl,
States = register.States??0,
CompileMan = register.CompileMan,
CreateDate = DateTime.Now
};
db.Supervise_UnitHazardRegister.InsertOnSubmit(newRegister);
db.SubmitChanges();
}
}
public static string ConvertState(int state)
{
string result = string.Empty;
result = StateMap.First(c => c.Value == state).Key;
return result;
}
/// <summary>
/// 删除企业级检查记录
/// </summary>
/// <param name="registerId">检查记录ID</param>
public static void DeleteUnitHazardRegisterById(string registerId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var register = db.Supervise_UnitHazardRegister.FirstOrDefault(e => e.UnitHazardRegisterId == registerId);
if (register != null)
{
// 删除附件
if (!string.IsNullOrEmpty(register.AttachUrl))
{
BLL.UploadFileService.DeleteFile(Funs.AttachRootPath, register.AttachUrl);
}
// 删除编码记录
BLL.CodeRecordsService.DeleteCodeRecordsByDataId(registerId);
// 删除附件
BLL.CommonService.DeleteAttachFileById(registerId);
// 删除流程
BLL.CommonService.DeleteFlowOperateByID(registerId);
db.Supervise_UnitHazardRegister.DeleteOnSubmit(register);
db.SubmitChanges();
}
}
}
/// <summary>
/// 根据项目和时间段获取检查数量
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="startTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <returns>检查数量</returns>
public static int GetCount(string projectId, DateTime startTime, DateTime endTime)
{
return (from x in Funs.DB.Supervise_UnitHazardRegister
where x.ProjectId == projectId && x.CheckDate >= startTime && x.CheckDate <= endTime
select x).Count();
}
public static int GetCount(string checkMainType)
{
return (from x in Funs.DB.Supervise_UnitHazardRegister
where x.CheckMainType ==checkMainType
select x.UnitHazardRegisterId).Count();
}
/// <summary>
/// 根据ID获取企业级检查记录
/// </summary>
/// <param name="registerId">检查记录ID</param>
/// <returns>企业级检查记录</returns>
public static Model.Supervise_UnitHazardRegister GetUnitHazardRegisterById(string registerId)
{
return Funs.DB.Supervise_UnitHazardRegister.FirstOrDefault(e => e.UnitHazardRegisterId == registerId);
}
/// <summary>
/// 判断是否可以删除检查记录
/// </summary>
/// <param name="registerId">检查记录ID</param>
/// <returns>true=可以删除,false=不能删除</returns>
public static bool CanDeleteRegister(string registerId)
{
var register = GetUnitHazardRegisterById(registerId);
if (register == null)
{
return false;
}
// 只有"待提交"状态可以删除,其他状态不能删除
return register.States <= (int)StateInt.;
}
/// <summary>
/// 获取企业级检查列表(使用input对象,返回总数)
/// </summary>
/// <param name="input">查询条件</param>
/// <param name="pageIndex">页码(从0开始)</param>
/// <param name="pageSize">每页大小</param>
/// <param name="returnAll">是否返回所有数据(不分页)</param>
/// <param name="totalCount">总记录数</param>
/// <returns>检查记录列表</returns>
public static List<UnitHazardRegisterOutput> GetUnitHazardRegisters(
UnitHazardRegisterInput input,
int pageIndex,
int pageSize,
bool returnAll,
out int totalCount)
{
var db = Funs.DB;
// 使用JOIN一次性获取所有数据,解决N+1查询问题
var query = from x in db.Supervise_UnitHazardRegister
join ct in db.Base_SuperviseCheckType
on new { MainType = x.CheckMainType, TypeCode = x.CheckType }
equals new { MainType = ct.CheckMainType, TypeCode = ct.CheckTypeCode } into ctGroup
from ct in ctGroup.DefaultIfEmpty()
join u in db.Base_Unit
on x.CheckUnitId equals u.UnitId into uGroup
from u in uGroup.DefaultIfEmpty()
join p in db.Base_Project on x.ProjectId equals p.ProjectId into pGroup
from p in pGroup.DefaultIfEmpty()
select new UnitHazardRegisterOutput
{
UnitHazardRegisterId = x.UnitHazardRegisterId,
UnitHazardRegisterCode = x.UnitHazardRegisterCode,
CheckDate = x.CheckDate,
ProjectId = x.ProjectId,
CheckMainTypeName = x.CheckMainType == "0" ? "安全" : "质量",
CheckType = x.CheckType,
CheckTypeName = ct.CheckTypeName,
CheckObjectText = p.ProjectName,
CheckUnitName = u.UnitName,
CheckTeam = x.CheckTeam,
EvaluationResult = x.EvaluationResult,
StatesName = ConvertState(x.States.Value),
AttachUrl = x.AttachUrl,
};
// 应用检查大类过滤
if (input != null && !string.IsNullOrEmpty(input.CheckMainType))
{
query = query.Where(x => x.CheckMainTypeName.Contains(input.CheckMainType == "0" ? "安全" : "质量"));
}
// 应用文本搜索
if (input != null && !string.IsNullOrEmpty(input.SearchText))
{
query = query.Where(x => x.UnitHazardRegisterCode.Contains(input.SearchText) ||
x.CheckObjectText.Contains(input.SearchText) ||
x.CheckTeam.Contains(input.SearchText) ||
x.EvaluationResult.Contains(input.SearchText));
}
// 应用检查类别过滤
if (input != null && !string.IsNullOrEmpty(input.CheckType) && input.CheckType != BLL.Const._Null)
{
query = query.Where(x => x.CheckType == input.CheckType);
}
// 项目权限过滤
if (input != null && !string.IsNullOrEmpty(input.ProjectId))
{
query = query.Where(x => x.ProjectId != null && x.ProjectId == input.ProjectId);
}
// 获取总数
totalCount = query.Count();
// 排序和分页
var orderedQuery = query.OrderByDescending(x => x.CheckDate);
if (returnAll)
{
return orderedQuery.ToList();
}
return orderedQuery
.Skip(pageIndex * pageSize)
.Take(pageSize)
.ToList();
}
/// <summary>
/// 更新企业级检查记录
/// </summary>
/// <param name="register">企业级检查记录</param>
public static void UpdateUnitHazardRegister(Model.Supervise_UnitHazardRegister register)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
Model.Supervise_UnitHazardRegister newRegister =
db.Supervise_UnitHazardRegister.FirstOrDefault(e => e.UnitHazardRegisterId == register.UnitHazardRegisterId);
if (newRegister != null)
{
newRegister.UnitHazardRegisterCode = register.UnitHazardRegisterCode;
newRegister.CheckDate = register.CheckDate;
newRegister.CheckMainType = register.CheckMainType;
newRegister.CheckType = register.CheckType;
newRegister.ProjectId = register.ProjectId;
newRegister.CheckUnitId = register.CheckUnitId;
newRegister.CheckTeam = register.CheckTeam;
newRegister.CheckManIds = register.CheckManIds;
newRegister.CheckManNames = register.CheckManNames;
newRegister.EvaluationResult = register.EvaluationResult;
newRegister.AttachUrl = register.AttachUrl;
newRegister.States = register.States;
newRegister.InsResponsibleUserId = register.InsResponsibleUserId;
newRegister.UpdateDate = DateTime.Now;
db.SubmitChanges();
}
}
}
/// <summary>
/// 更新主单状态(根据明细的整改情况)
/// </summary>
public static void UpdateRegisterStatus(string registerId)
{
// 获取主单的所有明细的整改状态
int rectifyStatus = BLL.UnitHazardRegisterItemService.GetRectifyStatus(registerId);
var register = BLL.UnitHazardRegisterService.GetUnitHazardRegisterById(registerId);
if (register != null)
{
// 根据整改状态更新主单状态
switch (rectifyStatus)
{
case 0: // 全部未整改
register.States = (int)UnitHazardRegisterService.StateInt.; // 待整改
break;
case 1: // 部分整改
register.States = (int)UnitHazardRegisterService.StateInt.; ; // 待整改
break;
case 2: // 全部整改
register.States = (int)UnitHazardRegisterService.StateInt.; ; // 已完成
break;
}
BLL.UnitHazardRegisterService.UpdateUnitHazardRegister(register);
}
}
#endregion Methods
}
}