2026-03-20 17:05:24 +08:00
|
|
|
|
using Model;
|
|
|
|
|
|
using Newtonsoft.Json;
|
2026-03-16 20:12:55 +08:00
|
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
|
|
|
|
namespace BLL
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 质量计量器具同步服务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class APIInspectionMachineSyncService
|
|
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
#region 分包单位推送数据到总包单位
|
2026-03-16 20:12:55 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-03-20 17:05:24 +08:00
|
|
|
|
/// 分包单位推送数据到总包单位
|
2026-03-16 20:12:55 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="projectId">项目ID</param>
|
|
|
|
|
|
/// <param name="dataId">数据ID(可选,用于单条数据推送)</param>
|
|
|
|
|
|
/// <returns>推送结果</returns>
|
2026-03-20 17:05:24 +08:00
|
|
|
|
public static ReturnData PushInspectionMachineLists(string projectId, string dataId = "")
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
|
|
|
|
|
Model.ReturnData responeData = new Model.ReturnData();
|
|
|
|
|
|
responeData.code = 0;
|
|
|
|
|
|
responeData.message = string.Empty;
|
2026-03-20 17:05:24 +08:00
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
try
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
var project = db.Base_Project.FirstOrDefault(x => x.ProjectId == projectId);
|
|
|
|
|
|
if (project != null)
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
//获取质量计量器具数据
|
|
|
|
|
|
var list = from x in db.Comprehensive_InspectionMachine where x.ProjectId == projectId select x;
|
2026-03-16 20:12:55 +08:00
|
|
|
|
|
2026-03-20 17:05:24 +08:00
|
|
|
|
if (!string.IsNullOrEmpty(dataId))
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
list = list.Where(x => x.InspectionMachineId == dataId);
|
2026-03-16 20:12:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 17:05:24 +08:00
|
|
|
|
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)
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
var thisUnit = CommonService.GetIsThisUnit(); //当前单位
|
|
|
|
|
|
var apiurl = "/api/InspectionMachineSync/SaveInspectionMachineSyncData";
|
2026-03-16 20:12:55 +08:00
|
|
|
|
|
2026-03-20 17:05:24 +08:00
|
|
|
|
//总包单位接口地址
|
|
|
|
|
|
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
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
responeData.code = 0;
|
|
|
|
|
|
responeData.message = "当前没有质量计量器具数据";
|
2026-03-16 20:12:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-03-20 17:05:24 +08:00
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
responeData.message = "同步到总包单位失败!";
|
|
|
|
|
|
ErrLogInfo.WriteLog("【质量计量器具】同步到总包单位失败!", ex);
|
|
|
|
|
|
}
|
2026-03-16 20:12:55 +08:00
|
|
|
|
|
2026-03-20 17:05:24 +08:00
|
|
|
|
}
|
2026-03-16 20:12:55 +08:00
|
|
|
|
return responeData;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-03-20 17:05:24 +08:00
|
|
|
|
#region 总包单位接收分包单位推送数据
|
2026-03-16 20:12:55 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-03-20 17:05:24 +08:00
|
|
|
|
/// 总包单位接收分包单位推送数据
|
2026-03-16 20:12:55 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="items">质量计量器具同步数据</param>
|
|
|
|
|
|
/// <returns>处理结果消息</returns>
|
2026-03-20 17:05:24 +08:00
|
|
|
|
public static string SaveInspectionMachineSyncData(Model.InspectionMachineSyncData data)
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
string result = string.Empty;
|
|
|
|
|
|
|
|
|
|
|
|
if (data.Items.Count > 0 || data.Items.Count > 0)
|
2026-03-16 20:12:55 +08:00
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
var CollCropCode = data.CollCropCode; //分包单位社会统一信用码
|
|
|
|
|
|
var ProjectId = data.SubjectProject; //总包项目Id
|
|
|
|
|
|
var UnitDomain = data.UnitDomain; //分包单位域名地址【文件存储地址】
|
2026-03-16 20:12:55 +08:00
|
|
|
|
|
2026-03-20 17:05:24 +08:00
|
|
|
|
//1、判断分包单位是否存在
|
|
|
|
|
|
var unit = UnitService.getUnitByCollCropCodeUnitName(CollCropCode, data.UnitName);
|
2026-03-16 20:12:55 +08:00
|
|
|
|
if (unit == null)
|
|
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
result = "总包单位不存在本单位,请登录总包系统检查维护本单位信息!";
|
2026-03-16 20:12:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
//判断主包项目是否存在
|
|
|
|
|
|
var porject = BLL.ProjectService.GetProjectByProjectId(ProjectId);
|
|
|
|
|
|
if (porject == null)
|
|
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
result = "总包单位不存在本项目,请检查总包项目关联是否正确!";
|
2026-03-16 20:12:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
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 = "数据推送成功!";
|
2026-03-16 20:12:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2026-03-20 17:05:24 +08:00
|
|
|
|
result = "暂无质量计量器具数据!";
|
2026-03-16 20:12:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 17:05:24 +08:00
|
|
|
|
return result;
|
2026-03-16 20:12:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 辅助映射方法
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取专业ID(根据名称)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="professionalName">专业名称</param>
|
|
|
|
|
|
/// <returns>专业ID</returns>
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 17:05:24 +08:00
|
|
|
|
|
2026-03-16 20:12:55 +08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|