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

539 lines
24 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
#region
/// <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()
join attRe in db.AttachFile on x.CheckControlCode + "r" equals attRe.ToKeyId into attReTemp
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);
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);
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;
}
/// <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;
}
/// <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
}
}