CNCEC_SUBQHSE_WUHUAN/SGGL/BLL/DataShare/CQMS/APICheckControlSyncService.cs

545 lines
24 KiB
C#
Raw Normal View History

2026-03-09 19:10:40 +08:00
using Newtonsoft.Json.Linq;
using System;
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
{
/// <summary>
/// 质量巡检同步服务
/// </summary>
public class APICheckControlSyncService
{
2026-03-16 20:12:55 +08:00
#region
2026-03-09 19:10:40 +08:00
/// <summary>
/// 根据项目、单位获取质量巡检列表
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="unitId">单位ID</param>
/// <param name="dataId">数据ID可选用于单条数据同步</param>
/// <returns>质量巡检数据列表</returns>
public static List<Model.CheckControlSyncItem> GetCheckControlListsByProjectIdUnitIdPage(
string projectId, string unitId, string dataId = "")
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var list = from x in db.Check_CheckControl
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.CheckControlCode == dataId);
}
var dataList = (from x in list
join unit in db.Base_Unit on x.UnitId equals unit.UnitId into unitTemp
from unit in unitTemp.DefaultIfEmpty()
join pro in db.Base_CNProfessional on x.CNProfessionalCode equals pro.CNProfessionalId into proTemp
from pro in proTemp.DefaultIfEmpty()
join uw in db.WBS_UnitWork on x.UnitWorkId equals uw.UnitWorkId into uwTemp
from uw in uwTemp.DefaultIfEmpty()
join qqt in db.Base_QualityQuestionType on x.QuestionType equals qqt.QualityQuestionTypeId into qqtTemp
from qqt in qqtTemp.DefaultIfEmpty()
join u1 in db.Sys_User on x.CheckMan equals u1.UserId into u1Temp
from u1 in u1Temp.DefaultIfEmpty()
join u2 in db.Sys_User on x.SubmitMan equals u2.UserId into u2Temp
from u2 in u2Temp.DefaultIfEmpty()
join pu in db.Base_Unit on x.ProposeUnitId equals pu.UnitId into puTemp
from pu in puTemp.DefaultIfEmpty()
join att in db.AttachFile on x.CheckControlCode equals att.ToKeyId into attTemp
from att in attTemp.DefaultIfEmpty()
2026-03-16 20:12:55 +08:00
join attRe in db.AttachFile on x.CheckControlCode+"r" equals attRe.ToKeyId into attReTemp
2026-03-09 19:10:40 +08:00
from attRe in attReTemp.DefaultIfEmpty()
select new CheckControlSyncItem
{
CheckControlCode = x.CheckControlCode,
ProjectId = x.ProjectId,
UnitWorkId = x.UnitWorkId,
UnitWorkName = uw.UnitWorkName,
UnitId = x.UnitId,
UnitName = unit.UnitName,
CheckDate = x.CheckDate,
CheckMan = x.CheckMan,
CheckManName = u1.UserName,
CheckSite = x.CheckSite,
DocCode = x.DocCode,
CNProfessionalCode = x.CNProfessionalCode,
CNProfessionalName = pro.ProfessionalName,
QuestionType = x.QuestionType,
QuestionTypeName = qqt.QualityQuestionType,
QuestionDef = x.QuestionDef,
RectifyOpinion = x.RectifyOpinion,
LimitDate = x.LimitDate,
AttachUrl = att.AttachUrl,
HandleWay = x.HandleWay,
RectifyDate = x.RectifyDate,
ReAttachUrl = attRe.AttachUrl,
State = x.State,
IsSubmit = x.IsSubmit,
SubmitMan = x.SubmitMan,
SubmitManName = u2.UserName,
IsOK = x.IsOK,
ProposeUnitId = x.ProposeUnitId,
ProposeUnitName = pu.UnitName,
SaveHandleMan = x.SaveHandleMan,
DataSource = "1"
}).ToList();
return dataList;
}
}
#endregion
#region
/// <summary>
/// 拉取质量巡检数据
/// </summary>
/// <returns>处理结果消息</returns>
public static string getCheckControlLists(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.IsDelete == null || x.IsDelete == false) &&
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);
2026-03-16 20:12:55 +08:00
//var Url = "http://localhost:14957/,http://localhost:8579/";
2026-03-09 19:10:40 +08:00
var ApiUrl = "";
var WebUrl = "";
if (!string.IsNullOrEmpty(Url))
{
var urls = Url.Split(',');
ApiUrl = urls[0];
if (urls.Length > 1)
{
WebUrl = urls[1];
}
}
string url = "/api/CheckControlSync/getCheckControlListByProjectIdAndCollCropCode?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<CheckControlSyncItem>>(obj["data"].ToString());
if (getData.Count() > 0)
{
ProcessCheckControlData(getData, project.ProjectId, unitId, WebUrl, "pull");
}
message = "获取成功:同步质量巡检数" + getData.Count().ToString() + "条";
}
}
}
}
}
catch (Exception ex)
{
message = "获取失败:" + ex.Message;
ErrLogInfo.WriteLog("质量巡检获取!", ex);
}
return message;
}
#endregion
#region
/// <summary>
/// 推送质量巡检数据
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="dataId">数据ID可选用于单条数据推送</param>
/// <returns>推送结果</returns>
public static ReturnData pushCheckControlLists(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 = GetCheckControlListsByProjectIdUnitIdPage(projectId, "", dataId);
if (items.Count() > 0)
{
var thisUnit = CommonService.GetIsThisUnit(); //当前单位
var apiurl = "/api/CheckControlSync/SaveCheckControlSyncData";
//总包单位接口地址
var Url = BLL.UnitService.getUnitApiUrlByUnitId(project.SubjectUnit);
2026-03-16 20:12:55 +08:00
//var Url = "http://localhost:14957/";
2026-03-09 19:10:40 +08:00
var ApiUrl = "";
var WebUrl = "";
if (!string.IsNullOrEmpty(Url))
{
var urls = Url.Split(',');
ApiUrl = urls[0];
if (urls.Length > 1)
{
WebUrl = urls[1];
}
}
var pushData = new CheckControlSyncData
{
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
/// <summary>
/// 接收保存质量巡检数据
/// </summary>
/// <param name="items">质量巡检同步数据</param>
/// <returns>处理结果消息</returns>
public static string SaveCheckControlSyncData(Model.CheckControlSyncData 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
{
//判断主包项目是否存在
var porject = BLL.ProjectService.GetProjectByProjectId(ProjectId);
if (porject == null)
{
message = "总包单位不存在本项目,请检查总包项目关联是否正确!";
}
else
{
ProcessCheckControlData(items.Items, ProjectId, unit.UnitId, UnitDomain, "push");
message = "数据推送成功!";
}
}
}
else
{
message = "暂无质量巡检数据!";
}
}
catch (Exception ex)
{
throw ex;
}
return message;
}
#endregion
#region
/// <summary>
/// 处理质量巡检数据的新增或更新逻辑
/// </summary>
/// <param name="getData">质量巡检数据列表</param>
/// <param name="projectId">项目id</param>
/// <param name="unitId">单位ID</param>
/// <param name="WebUrl">Web地址</param>
///
private static void ProcessCheckControlData(
List<Model.CheckControlSyncItem> getData,
string projectId,
string unitId,
string WebUrl, string type)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
foreach (var item in getData)
{
Model.Check_CheckControl model = db.Check_CheckControl.FirstOrDefault(x => x.CheckControlCode == item.CheckControlCode);
if (model == null)
{
//新增
Model.Check_CheckControl newModel = new Model.Check_CheckControl
{
CheckControlCode = item.CheckControlCode,
ProjectId = projectId,
UnitWorkId = APIDataShareSyncService.getUnitWorkId(item.UnitWorkName, projectId),
UnitId = getUnitIdByUnitName(item.UnitName) ?? unitId,
CheckDate = item.CheckDate,
CheckMan = APIDataShareSyncService.getUserId(item.CheckManName),
CheckSite = item.CheckSite,
DocCode = item.DocCode,
CNProfessionalCode = getCNProfessionalId(item.CNProfessionalName),
QuestionType = getQualityQuestionTypeId(item.QuestionTypeName, projectId),
QuestionDef = item.QuestionDef,
RectifyOpinion = item.RectifyOpinion,
LimitDate = item.LimitDate,
AttachUrl = item.AttachUrl,
HandleWay = item.HandleWay,
RectifyDate = item.RectifyDate,
ReAttachUrl = item.ReAttachUrl,
State = item.State,
IsSubmit = item.IsSubmit,
SubmitMan = APIDataShareSyncService.getUserId(item.SubmitManName),
IsOK = item.IsOK,
ProposeUnitId = getUnitIdByUnitName(item.ProposeUnitName),
SaveHandleMan = item.SaveHandleMan
};
if (type == "pull")
{
newModel.DataSource = item.DataSource;
}
db.Check_CheckControl.InsertOnSubmit(newModel);
db.SubmitChanges();
}
else
{
//更新
model.ProjectId = projectId;
model.UnitWorkId = APIDataShareSyncService.getUnitWorkId(item.UnitWorkName, projectId);
model.UnitId = getUnitIdByUnitName(item.UnitName) ?? unitId;
model.CheckDate = item.CheckDate;
model.CheckMan = APIDataShareSyncService.getUserId(item.CheckManName);
model.CheckSite = item.CheckSite;
model.DocCode = item.DocCode;
model.CNProfessionalCode = getCNProfessionalId(item.CNProfessionalName);
model.QuestionType = getQualityQuestionTypeId(item.QuestionTypeName, projectId);
model.QuestionDef = item.QuestionDef;
model.RectifyOpinion = item.RectifyOpinion;
model.LimitDate = item.LimitDate;
model.AttachUrl = item.AttachUrl;
model.HandleWay = item.HandleWay;
model.RectifyDate = item.RectifyDate;
model.ReAttachUrl = item.ReAttachUrl;
model.State = item.State;
model.IsSubmit = item.IsSubmit;
model.SubmitMan = APIDataShareSyncService.getUserId(item.SubmitManName);
model.IsOK = item.IsOK;
model.ProposeUnitId = getUnitIdByUnitName(item.ProposeUnitName);
model.SaveHandleMan = item.SaveHandleMan;
if (type == "pull")
{
model.DataSource = item.DataSource;
}
db.SubmitChanges();
}
//处理整改前附件
if (!string.IsNullOrEmpty(item.AttachUrl))
{
APIDataShareSyncService.OperationAttachFile(WebUrl, item.CheckControlCode,
BLL.Const.CheckListMenuId, item.AttachUrl);
}
//处理整改后附件
if (!string.IsNullOrEmpty(item.ReAttachUrl))
{
APIDataShareSyncService.OperationAttachFile(WebUrl, item.CheckControlCode + "R",
BLL.Const.CheckListMenuId, item.ReAttachUrl);
}
}
}
}
#endregion
#region
/// <summary>
/// 获取质量问题类型ID不存在则创建
/// </summary>
/// <param name="questionTypeName">问题类型名称</param>
/// <param name="projectId">项目ID</param>
/// <returns>问题类型ID</returns>
private static string getQualityQuestionTypeId(string questionTypeName, string projectId)
{
string questionTypeId = null;
if (!string.IsNullOrEmpty(questionTypeName))
{
var qqt = Funs.DB.Base_QualityQuestionType.FirstOrDefault(x => x.QualityQuestionType == questionTypeName);
if (qqt == null)
{
//不存在则创建
Model.Base_QualityQuestionType newQqt = new Model.Base_QualityQuestionType
{
QualityQuestionTypeId = SQLHelper.GetNewID(typeof(Model.Base_QualityQuestionType)),
QualityQuestionType = questionTypeName
};
QualityQuestionTypeService.AddQualityQuestionType(newQqt);
questionTypeId = newQqt.QualityQuestionTypeId;
}
else
{
questionTypeId = qqt.QualityQuestionTypeId;
}
}
return questionTypeId;
}
2026-03-16 20:12:55 +08:00
2026-03-09 19:10:40 +08:00
/// <summary>
/// 获取专业ID不存在则创建
/// </summary>
/// <param name="ProfessionalName"></param>
/// <param name="projectId"></param>
/// <returns></returns>
private static string getCNProfessionalId(string ProfessionalName)
{
string Id = null;
if (!string.IsNullOrEmpty(ProfessionalName))
{
var names = ProfessionalName.Split(',');
List<string> IdList = new List<string>();
foreach (var name in names)
{
var cnProfessional = Funs.DB.Base_CNProfessional.Where(x =>
x.ProfessionalName == name).ToList();
if (cnProfessional.Count == 0)
{
Model.Base_CNProfessional newCnProfessional = new Model.Base_CNProfessional
{
CNProfessionalId = SQLHelper.GetNewID(typeof(Model.WBS_UnitWork)),
ProfessionalName = name,
};
CNProfessionalService.AddCNProfessional(newCnProfessional);
IdList.Add(newCnProfessional.CNProfessionalId);
}
else
{
IdList.Add(cnProfessional.FirstOrDefault().CNProfessionalId);
}
}
Id = string.Join(",", IdList);
}
return Id;
2026-03-16 20:12:55 +08:00
}
2026-03-09 19:10:40 +08:00
/// <summary>
/// 获取单位ID根据名称
/// </summary>
/// <param name="unitName">单位名称</param>
/// <returns>单位ID</returns>
private static string getUnitIdByUnitName(string unitName)
{
string unitId = null;
if (!string.IsNullOrEmpty(unitName))
{
var unit = Funs.DB.Base_Unit.FirstOrDefault(x => x.UnitName == unitName);
if (unit != null)
{
unitId = unit.UnitId;
}
}
return unitId;
}
#endregion
}
}