442 lines
18 KiB
C#
442 lines
18 KiB
C#
using Newtonsoft.Json.Linq;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Configuration;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Net.Http;
|
||
using System.Threading.Tasks;
|
||
using Model;
|
||
using Newtonsoft.Json;
|
||
using RestSharp;
|
||
using System.Net;
|
||
using System.Web;
|
||
|
||
namespace BLL
|
||
{
|
||
/// <summary>
|
||
/// 质量会议同步服务
|
||
/// </summary>
|
||
public class APICqmsMeetingSyncService
|
||
{
|
||
#region 根据项目、单位获取质量会议列表
|
||
|
||
/// <summary>
|
||
/// 根据项目、单位获取质量会议列表
|
||
/// </summary>
|
||
/// <param name="projectId">项目ID</param>
|
||
/// <param name="unitId">单位ID</param>
|
||
/// <param name="dataId">数据ID(可选,用于单条数据同步)</param>
|
||
/// <returns>质量会议数据列表</returns>
|
||
public static List<Model.CqmsMeetingSyncItem> GetCqmsMeetingListsByProjectIdUnitIdPage(
|
||
string projectId, string unitId, string dataId = "")
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
var list = from x in db.CQMS_Meeting
|
||
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.MeetingId == 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 u1 in db.Sys_User on x.CompileMan equals u1.UserId into u1Temp
|
||
from u1 in u1Temp.DefaultIfEmpty()
|
||
join u2 in db.Sys_User on x.MeetingHostMan equals u2.UserId into u2Temp
|
||
from u2 in u2Temp.DefaultIfEmpty()
|
||
join cr in db.Sys_CodeRecords on x.MeetingId equals cr.DataId into crTemp
|
||
from cr in crTemp.DefaultIfEmpty()
|
||
select new CqmsMeetingSyncItem
|
||
{
|
||
MeetingId = x.MeetingId,
|
||
MeetingCode = cr.Code,
|
||
MeetingName = x.MeetingName,
|
||
ProjectId = x.ProjectId,
|
||
UnitId = x.UnitId,
|
||
UnitName = unit.UnitName,
|
||
MeetingDate = x.MeetingDate,
|
||
MeetingHours = x.MeetingHours,
|
||
MeetingPlace = x.MeetingPlace,
|
||
MeetingHostMan = x.MeetingHostMan,
|
||
MeetingHostManName = u2.UserName,
|
||
MeetingHostManOther = x.MeetingHostManOther,
|
||
AttentPersonNum = x.AttentPersonNum,
|
||
AttentPerson = x.AttentPerson,
|
||
AttentPersonIds = x.AttentPersonIds,
|
||
MeetingContents = x.MeetingContents,
|
||
CompileMan = x.CompileMan,
|
||
CompileManName = u1.UserName,
|
||
CompileDate = x.CompileDate,
|
||
States = x.States,
|
||
DataSource = "1"
|
||
}).ToList();
|
||
|
||
return dataList;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
|
||
#region 拉取质量会议数据
|
||
|
||
/// <summary>
|
||
/// 拉取质量会议数据
|
||
/// </summary>
|
||
/// <returns>处理结果消息</returns>
|
||
public static string getCqmsMeetingLists()
|
||
{
|
||
int code = 0;
|
||
string message = "";
|
||
try
|
||
{
|
||
string CollCropCode = string.Empty;
|
||
string unitId = string.Empty;
|
||
var thisUnit = CommonService.GetIsThisUnit(); //当前单位
|
||
if (thisUnit != null)
|
||
{
|
||
CollCropCode = thisUnit.CollCropCode; //社会统一信用代码
|
||
unitId = thisUnit.UnitId;
|
||
}
|
||
|
||
var ProjectList = (from x in Funs.DB.Base_Project
|
||
where (x.IsDelete == null || x.IsDelete == false) &&
|
||
x.SubjectUnit != null && x.SubjectProject != null
|
||
select x).ToList();
|
||
|
||
if (ProjectList.Count > 0)
|
||
{
|
||
foreach (var project in ProjectList)
|
||
{
|
||
string SubjectUnitId = project.SubjectUnit; //集团的单位id
|
||
string SubjectProjectId = project.SubjectProject; //集团的项目id
|
||
|
||
//获取对应单位的apiurl地址
|
||
var Url = BLL.UnitService.getUnitApiUrlByUnitId(SubjectUnitId);
|
||
var ApiUrl = "";
|
||
var WebUrl = "";
|
||
if (!string.IsNullOrEmpty(Url))
|
||
{
|
||
var urls = Url.Split(',');
|
||
ApiUrl = urls[0];
|
||
if (urls.Length > 1)
|
||
{
|
||
WebUrl = urls[1];
|
||
}
|
||
}
|
||
|
||
string url = "/api/CqmsMeetingSync/getCqmsMeetingListByProjectIdAndCollCropCode?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<CqmsMeetingSyncItem>>(obj["data"].ToString());
|
||
if (getData.Count() > 0)
|
||
{
|
||
ProcessCqmsMeetingData(getData, project.ProjectId, unitId, WebUrl);
|
||
}
|
||
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 pushCqmsMeetingLists(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 = GetCqmsMeetingListsByProjectIdUnitIdPage(projectId, "", dataId);
|
||
|
||
if (items.Count() > 0)
|
||
{
|
||
var thisUnit = CommonService.GetIsThisUnit(); //当前单位
|
||
var apiurl = "/api/CqmsMeetingSync/SaveCqmsMeetingSyncData";
|
||
|
||
//总包单位接口地址
|
||
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 CqmsMeetingSyncData
|
||
{
|
||
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 SaveCqmsMeetingSyncData(Model.CqmsMeetingSyncData 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
|
||
{
|
||
ProcessCqmsMeetingData(items.Items, ProjectId, unit.UnitId, UnitDomain);
|
||
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 ProcessCqmsMeetingData(
|
||
List<Model.CqmsMeetingSyncItem> getData,
|
||
string projectId,
|
||
string unitId,
|
||
string WebUrl)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
foreach (var item in getData)
|
||
{
|
||
Model.CQMS_Meeting model = db.CQMS_Meeting.FirstOrDefault(x => x.MeetingId == item.MeetingId);
|
||
|
||
//HTML解码会议内容
|
||
string meetingContents = !string.IsNullOrEmpty(item.MeetingContents)
|
||
? HttpUtility.HtmlDecode(item.MeetingContents)
|
||
: item.MeetingContents;
|
||
|
||
if (model == null)
|
||
{
|
||
//新增
|
||
Model.CQMS_Meeting newModel = new Model.CQMS_Meeting
|
||
{
|
||
MeetingId = item.MeetingId,
|
||
ProjectId = projectId,
|
||
UnitId = getUnitIdByUnitName(item.UnitName) ?? unitId,
|
||
MeetingCode = item.MeetingCode,
|
||
MeetingName = item.MeetingName,
|
||
MeetingDate = item.MeetingDate,
|
||
MeetingHours = item.MeetingHours,
|
||
MeetingPlace = item.MeetingPlace,
|
||
MeetingHostMan = APIDataShareSyncService.getUserId(item.MeetingHostManName),
|
||
MeetingHostManOther = item.MeetingHostManOther,
|
||
AttentPersonNum = item.AttentPersonNum,
|
||
AttentPerson = item.AttentPerson,
|
||
AttentPersonIds = item.AttentPersonIds,
|
||
MeetingContents = meetingContents,
|
||
CompileMan = APIDataShareSyncService.getUserId(item.CompileManName),
|
||
CompileDate = item.CompileDate,
|
||
States = item.States
|
||
};
|
||
|
||
db.CQMS_Meeting.InsertOnSubmit(newModel);
|
||
db.SubmitChanges();
|
||
|
||
//保存会议编码
|
||
if (!string.IsNullOrEmpty(item.MeetingCode))
|
||
{
|
||
Model.Sys_CodeRecords codeRecords = new Model.Sys_CodeRecords
|
||
{
|
||
CodeRecordId = SQLHelper.GetNewID(typeof(Model.Sys_CodeRecords)),
|
||
DataId = item.MeetingId,
|
||
Code = item.MeetingCode
|
||
};
|
||
db.Sys_CodeRecords.InsertOnSubmit(codeRecords);
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//更新
|
||
model.ProjectId = projectId;
|
||
model.UnitId = getUnitIdByUnitName(item.UnitName) ?? unitId;
|
||
model.MeetingCode = item.MeetingCode;
|
||
model.MeetingName = item.MeetingName;
|
||
model.MeetingDate = item.MeetingDate;
|
||
model.MeetingHours = item.MeetingHours;
|
||
model.MeetingPlace = item.MeetingPlace;
|
||
model.MeetingHostMan = APIDataShareSyncService.getUserId(item.MeetingHostManName);
|
||
model.MeetingHostManOther = item.MeetingHostManOther;
|
||
model.AttentPersonNum = item.AttentPersonNum;
|
||
model.AttentPerson = item.AttentPerson;
|
||
model.AttentPersonIds = item.AttentPersonIds;
|
||
model.MeetingContents = meetingContents;
|
||
model.CompileMan = APIDataShareSyncService.getUserId(item.CompileManName);
|
||
model.CompileDate = item.CompileDate;
|
||
model.States = item.States;
|
||
db.SubmitChanges();
|
||
|
||
//更新会议编码
|
||
if (!string.IsNullOrEmpty(item.MeetingCode))
|
||
{
|
||
var codeRecords = db.Sys_CodeRecords.FirstOrDefault(x => x.DataId == item.MeetingId);
|
||
if (codeRecords != null)
|
||
{
|
||
codeRecords.Code = item.MeetingCode;
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
|
||
#region 辅助映射方法
|
||
|
||
/// <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
|
||
}
|
||
}
|