using Model; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Linq; namespace BLL { /// /// 质量计量器具同步服务 /// public class APIInspectionMachineSyncService { #region 分包单位推送数据到总包单位 /// /// 分包单位推送数据到总包单位 /// /// 项目ID /// 数据ID(可选,用于单条数据推送) /// 推送结果 public static ReturnData PushInspectionMachineLists(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 project = db.Base_Project.FirstOrDefault(x => x.ProjectId == projectId); if (project != null) { //获取质量计量器具数据 var list = from x in db.Comprehensive_InspectionMachine where x.ProjectId == projectId select x; if (!string.IsNullOrEmpty(dataId)) { list = list.Where(x => x.InspectionMachineId == 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.CNProfessionalId equals pro.CNProfessionalId into proTemp from pro in proTemp.DefaultIfEmpty() join u1 in db.Sys_User on x.CompileMan equals u1.UserId into u1Temp from u1 in u1Temp.DefaultIfEmpty() join att in db.AttachFile on x.InspectionMachineId equals att.ToKeyId into attTemp from att in attTemp.DefaultIfEmpty() select new InspectionMachineSyncItem { InspectionMachineId = x.InspectionMachineId, InspectionMachineCode = x.InspectionMachineCode, InspectionMachineName = x.InspectionMachineName, SpecificationModel = x.SpecificationModel, UnitsCount = x.UnitsCount, //SType = x.SType, InspectionType = x.InspectionType, InspectionDate = x.InspectionDate, NextTestDate = x.NextTestDate, TestCycle = x.TestCycle, IsCheckOK = x.IsCheckOK, IsVerification = x.IsVerification, Status = x.Status, IsOnSite = x.IsOnSite, LeaveDate = x.LeaveDate, UnitId = x.UnitId, UnitName = unit.UnitName, CNProfessionalId = x.CNProfessionalId, CNProfessionalName = pro.ProfessionalName, CompileMan = x.CompileMan, CompileManName = u1.UserName, CompileDate = x.CompileDate, ProjectId = x.ProjectId, AttachFileId = att.AttachFileId, ToKeyId = att.ToKeyId, AttachSource = att.AttachSource, AttachUrl = att.AttachUrl, }).ToList(); if (dataList.Count() > 0) { var thisUnit = CommonService.GetIsThisUnit(); //当前单位 var apiurl = "/api/InspectionMachineSync/SaveInspectionMachineSyncData"; //总包单位接口地址 string ApiUrl = project.SubjectUnitApiUrl; string WebUrl = project.SubjectUnitWebUrl; var pushData = new InspectionMachineSyncData { CollCropCode = thisUnit.CollCropCode,//分包单位社会统一信用码 UnitId = thisUnit.UnitId,//分包单位Id UnitName = thisUnit.UnitName,//分包单位名称 ShortUnitName = thisUnit.ShortUnitName,//分包单位简称 UnitDomain = Funs.SGGLUrl,//分包单位域名地址【文件存储地址】 SubjectUnit = project.SubjectUnit,//主包单位Id SubjectProject = project.SubjectProject,//主包项目Id Items = dataList//质量计量器具数据 }; 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 SaveInspectionMachineSyncData(Model.InspectionMachineSyncData data) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { string result = string.Empty; if (data.Items.Count > 0 || data.Items.Count > 0) { var CollCropCode = data.CollCropCode; //分包单位社会统一信用码 var ProjectId = data.SubjectProject; //总包项目Id var UnitDomain = data.UnitDomain; //分包单位域名地址【文件存储地址】 //1、判断分包单位是否存在 var unit = UnitService.getUnitByCollCropCodeUnitName(CollCropCode, data.UnitName); if (unit == null) { result = "总包单位不存在本单位,请登录总包系统检查维护本单位信息!"; } else { //判断主包项目是否存在 var porject = BLL.ProjectService.GetProjectByProjectId(ProjectId); if (porject == null) { result = "总包单位不存在本项目,请检查总包项目关联是否正确!"; } else { int succ = 0; foreach (var item in data.Items) { try { Model.Comprehensive_InspectionMachine model = db.Comprehensive_InspectionMachine.FirstOrDefault(x => x.InspectionMachineId == item.InspectionMachineId); if (model == null) { //新增 Model.Comprehensive_InspectionMachine newModel = new Model.Comprehensive_InspectionMachine { ProjectId = ProjectId, UnitId = unit.UnitId, InspectionMachineId = item.InspectionMachineId, InspectionMachineCode = item.InspectionMachineCode, InspectionMachineName = item.InspectionMachineName, SpecificationModel = item.SpecificationModel, NextTestDate = item.NextTestDate, TestCycle = item.TestCycle, IsVerification = item.IsVerification, InspectionDate = item.InspectionDate, AttachUrl = item.AttachUrl, CNProfessionalId = getCNProfessionalId(item.CNProfessionalName), //CompileMan = APIDataShareSyncService.getUserId(item.CompileManName), CompileDate = item.CompileDate, IsOnSite = item.IsOnSite, InspectionType = item.InspectionType, LeaveDate = item.LeaveDate, UnitsCount = item.UnitsCount, //AuditMan = item.AuditMan, Status = item.Status, IsCheckOK = item.IsCheckOK, //SType = item.SType, SourceDes = $"{(!string.IsNullOrWhiteSpace(data.ShortUnitName) ? data.ShortUnitName : data.UnitName)}#{item.CompileManName}#专业名称:{item.CNProfessionalName}", }; db.Comprehensive_InspectionMachine.InsertOnSubmit(newModel); db.SubmitChanges(); } else { //更新 model.ProjectId = ProjectId; model.UnitId = unit.UnitId; model.InspectionMachineCode = item.InspectionMachineCode; model.InspectionMachineName = item.InspectionMachineName; model.SpecificationModel = item.SpecificationModel; model.NextTestDate = item.NextTestDate; model.TestCycle = item.TestCycle; model.IsVerification = item.IsVerification; model.InspectionDate = item.InspectionDate; model.AttachUrl = item.AttachUrl; model.CNProfessionalId = getCNProfessionalId(item.CNProfessionalName); //model.CompileMan = APIDataShareSyncService.getUserId(item.CompileManName); model.CompileDate = item.CompileDate; model.IsOnSite = item.IsOnSite; model.InspectionType = item.InspectionType; model.LeaveDate = item.LeaveDate; model.UnitsCount = item.UnitsCount; //model.AuditMan = item.AuditMan; model.Status = item.Status; model.IsCheckOK = item.IsCheckOK; //model.SType = item.SType; model.SourceDes = $"{(!string.IsNullOrWhiteSpace(data.ShortUnitName) ? data.ShortUnitName : data.UnitName)}#{item.CompileManName}#专业名称:{item.CNProfessionalName}"; db.SubmitChanges(); } succ++; //附件处理:附件 BLL.FileInsertService.SaveAttachFileRecords(data.UnitDomain, item.AttachFileId, item.ToKeyId, item.AttachSource, item.AttachUrl); } catch (Exception ex) { BLL.ErrLogInfo.WriteLog($"【{porject.ProjectName}】计量器具数据推送总包失败", ex.Message); continue; } } result = "数据推送成功!"; } } } else { result = "暂无质量计量器具数据!"; } return result; } } #endregion #region 辅助映射方法 /// /// 获取专业ID(根据名称) /// /// 专业名称 /// 专业ID private static string getCNProfessionalId(string professionalName) { string professionalId = null; if (!string.IsNullOrEmpty(professionalName)) { var pro = Funs.DB.Base_CNProfessional.FirstOrDefault(x => x.ProfessionalName == professionalName); if (pro != null) { professionalId = pro.CNProfessionalId; } } return professionalId; } #endregion } }