539 lines
24 KiB
C#
539 lines
24 KiB
C#
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
|
||
}
|
||
}
|