using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Threading.Tasks;
namespace BLL
{
public static class APIReportQueryService
{
#region 根据人员二维码获取焊工业绩
///
/// 根据人员二维码获取焊工业绩
///
///
///
public static Model.WelderPerformanceItem GetWelderPerformanceByQRC(string personId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
// todo 二维码分解待做
var getDataLists = from x in db.View_WelderPerformance
where x.PersonId == personId
select new Model.WelderPerformanceItem
{
WelderCode = x.WelderCode,
PersonName = x.PersonName,
UnitName = x.UnitName,
CertificateLimitTime = x.CertificateLimitTime.ToString(),
WelderLevel = x.WelderLevel,
OnePassRate = x.PassRate,
TotalJotDin = x.Nowtotal_jot.ToString() + "/" + x.Nowtotal_din.ToString(),
WeldAvgNum = GetWeldAvgNum(personId, x.Nowtotal_din.HasValue ? x.Nowtotal_din.Value : 0),
OneCheckJotNum = x.OneCheckJotNum.ToString(),
OneCheckPassJotNum = x.OneCheckPassJotNum,
RepairJotNum = x.OneCheckRepairJotNum.ToString(),
ExpandJotNum = x.ExpandJotNum.ToString()
};
return getDataLists.FirstOrDefault();
}
}
#endregion
private static string GetWeldAvgNum(string personId,decimal totalDin)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
string vagDin = string.Empty;
var date = from x in db.HJGL_WeldJoint
join y in db.HJGL_WeldingDaily on x.WeldingDailyId equals y.WeldingDailyId
where x.BackingWelderId == personId || x.CoverWelderId == personId
select y.WeldingDate;
if (date.Count() > 0)
{
DateTime startDate = Convert.ToDateTime(date.Min());
DateTime endDate = Convert.ToDateTime(date.Max());
TimeSpan t = endDate - startDate;
int dayNum = t.Days;
vagDin = (totalDin / dayNum).ToString("0.##");
}
return vagDin;
}
}
#region 根据焊工号获取焊工业绩
///
/// 根据焊工号获取焊工业绩
///
///
///
///
public static Model.WelderPerformanceItem GetWelderPerformanceByWelderCode(string projectId,string welderCode)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
// todo 二维码分解待做
var getDataLists = from x in db.View_WelderPerformance
where x.ProjectId == projectId && x.WelderCode == welderCode
select new Model.WelderPerformanceItem
{
WelderCode = x.WelderCode,
PersonName = x.PersonName,
UnitName = x.UnitName,
CertificateLimitTime = x.CertificateLimitTime.ToString(),
WelderLevel = x.WelderLevel,
OnePassRate = x.PassRate,
TotalJotDin = x.Nowtotal_jot.ToString() + "/" + x.Nowtotal_din.ToString(),
WeldAvgNum = GetWeldAvgNum(x.PersonId, x.Nowtotal_din.HasValue ? x.Nowtotal_din.Value : 0),
OneCheckJotNum = x.OneCheckJotNum.ToString(),
OneCheckPassJotNum = x.OneCheckPassJotNum,
RepairJotNum = x.OneCheckRepairJotNum.ToString(),
ExpandJotNum = x.ExpandJotNum.ToString()
};
return getDataLists.FirstOrDefault();
}
}
#endregion
# region 根据人员ID获取焊工合格项目
///
/// 根据人员ID获取焊工合格项目
///
///
///
public static List getWelderQualify(string personId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var getDataLists = (from x in db.Welder_WelderQualify
where x.WelderId == personId
orderby x.LimitDate
select new Model.BaseInfoItem
{
BaseInfoId = x.QualificationItem, // 合格项目
BaseInfoCode = x.CheckDate.HasValue ? x.CheckDate.Value.ToString() : "", // 批准日期
BaseInfoName = x.LimitDate.HasValue ? x.LimitDate.Value.ToString() : "" // 有效日期
}
).ToList();
return getDataLists;
}
}
#endregion
#region 焊工资质预警
///
/// 焊工资质预警
///
///
///
public static List GetWelderQualifyWarning(string projectId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var welder = from x in db.SitePerson_Person
where x.ProjectId == projectId && x.WorkPostId == Const.WorkPost_Welder
&& x.WelderCode != null
select x;
List warnWelder = new List();
foreach (var q in welder)
{
DateTime? validity = q.CertificateLimitTime;
DateTime nowDate = DateTime.Now;
if (validity != null)
{
if (validity.Value.AddMonths(-1) < nowDate && validity >= nowDate)
{
Model.BaseInfoItem item = new Model.BaseInfoItem();
item.BaseInfoId = q.PersonId;
item.BaseInfoCode = q.WelderCode;
item.BaseInfoName = q.CertificateLimitTime.HasValue ? q.CertificateLimitTime.Value.ToString() : "" + "即将过期";
warnWelder.Add(item);
}
else if (validity < nowDate)
{
Model.BaseInfoItem item = new Model.BaseInfoItem();
item.BaseInfoId = q.PersonId;
item.BaseInfoCode =q.WelderCode;
item.BaseInfoName = q.CertificateLimitTime.HasValue ? q.CertificateLimitTime.Value.ToString() : "" + "已过期";
warnWelder.Add(item);
}
}
}
return warnWelder;
}
}
#endregion
#region 焊工一次合格率低于96%预警
///
/// 焊工一次合格率低于96%预警
///
///
///
public static List GetWelderOnePassRateWarning(string projectId)
{
string strSql = @"SELECT welder.ProjectId, welder.WelderCode, welder.PersonName,
CONVERT(NVARCHAR(10),(CAST((CASE ISNULL(oneCheck.OneCheckJotNum,0) WHEN 0 THEN 0
ELSE 100.0 * (ISNULL(oneCheck.OneCheckJotNum,0)-ISNULL(oneCheckRepair.oneCheckRepairJotNum,0))/(1.0 * oneCheck.OneCheckJotNum) END) AS DECIMAL(8,1))))+'%' AS passRate
FROM SitePerson_Person AS welder
LEFT JOIN (SELECT jot.CoverWelderId,COUNT(ndeItem.NDEItemID) AS OneCheckJotNum
FROM dbo.HJGL_Batch_NDEItem ndeItem
LEFT JOIN dbo.HJGL_Batch_BatchTrustItem trustItem ON trustItem.TrustBatchItemId = ndeItem.TrustBatchItemId
LEFT JOIN dbo.HJGL_WeldJoint jot ON jot.WeldJointId = trustItem.WeldJointId
LEFT JOIN dbo.HJGL_WeldingDaily daily ON daily.WeldingDailyId = jot.WeldingDailyId
LEFT JOIN dbo.HJGL_Batch_PointBatchItem pointItem ON pointItem.PointBatchItemId = trustItem.PointBatchItemId
LEFT JOIN dbo.HJGL_Batch_PointBatch point ON point.PointBatchId = pointItem.PointBatchId
WHERE pointItem.PointDate IS NOT NULL AND pointItem.PointState=1 AND trustItem.RepairRecordId IS NULL
GROUP BY jot.CoverWelderId) AS oneCheck ON oneCheck.CoverWelderId = welder.PersonId
LEFT JOIN (SELECT jot.CoverWelderId,COUNT(ndeItem.NDEItemID) AS OneCheckRepairJotNum --一次检测返修焊口数
FROM dbo.HJGL_Batch_NDEItem ndeItem
LEFT JOIN dbo.HJGL_Batch_BatchTrustItem trustItem ON trustItem.TrustBatchItemId = ndeItem.TrustBatchItemId
LEFT JOIN dbo.HJGL_WeldJoint jot ON jot.WeldJointId = trustItem.WeldJointId
LEFT JOIN dbo.HJGL_WeldingDaily daily ON daily.WeldingDailyId = jot.WeldingDailyId
LEFT JOIN dbo.HJGL_Batch_PointBatchItem pointItem ON pointItem.PointBatchItemId = trustItem.PointBatchItemId
LEFT JOIN dbo.HJGL_Batch_PointBatch point ON point.PointBatchId = pointItem.PointBatchId
WHERE pointItem.PointDate IS NOT NULL AND pointItem.PointState=1
AND trustItem.RepairRecordId IS NULL AND ndeItem.CheckResult='2'
GROUP BY jot.CoverWelderId) AS oneCheckRepair ON oneCheckRepair.CoverWelderId = welder.PersonId
WHERE (welder.WelderCode IS NOT NULL AND welder.WelderCode!='')
AND (welder.WorkPostId='19B8F2A9-28D3-4F20-867A-1B2237C2E228')
AND ISNULL(oneCheck.OneCheckJotNum,0)>0
AND (CAST((CASE ISNULL(oneCheck.OneCheckJotNum,0) WHEN 0 THEN 0
ELSE 100.0 * (ISNULL(oneCheck.OneCheckJotNum,0)-ISNULL(oneCheckRepair.oneCheckRepairJotNum,0))/(1.0 * oneCheck.OneCheckJotNum) END) AS DECIMAL(8,1)))<=96";
List listStr = new List();
strSql += " AND welder.ProjectId=@ProjectId";
listStr.Add(new SqlParameter("@ProjectId", projectId));
SqlParameter[] parameter = listStr.ToArray();
DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
List warnWelder = new List();
foreach (DataRow row in dt.Rows)
{
Model.BaseInfoItem item = new Model.BaseInfoItem();
item.BaseInfoCode = row["WelderCode"].ToString();
item.BaseInfoName = "一次合格率:" + row["passRate"].ToString();
warnWelder.Add(item);
}
return warnWelder;
}
#endregion
#region 根据焊口ID获取焊口信息和焊接信息
///
/// 根据焊口ID获取焊口信息和焊接信息
///
///
///
public static Model.JointCompreInfoItem GetJointCompreInfo(string weldJointId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var getDateInfo = from x in db.View_HJGL_WeldJoint
where x.WeldJointId == weldJointId
select new Model.JointCompreInfoItem
{
WeldJointCode = x.WeldJointCode,
PipelineCode = x.PipelineCode,
PipingClass = x.PipingClassCode,
Medium = x.MediumCode,
DetectionType = x.DetectionTypeCode,
WeldType = x.WeldTypeCode,
Material = x.MaterialCode,
JointArea = x.JointArea,
JointAttribute = x.JointAttribute,
WeldingMode = x.WeldingMode,
Size = x.Size,
Dia = x.Dia,
Thickness = x.Thickness,
Specification = x.Specification,
WeldingMethodCode = x.WeldingMethodCode,
GrooveType = x.GrooveTypeCode,
WeldingLocation = x.WeldingLocationCode,
WeldingWire = x.WeldingWireCode,
WeldingRod = x.WeldingRodCode,
IsHotProess = x.IsHotProessStr,
WelderCode = x.WelderCode,
WeldingDate = x.WeldingDate,
WeldingDailyCode = x.WeldingDailyCode,
PointBatchCode = x.PointBatchCode,
IsPoint = x.IsPoint
};
return getDateInfo.FirstOrDefault();
}
}
#endregion
#region 多维度查询报表
///
/// 多维度查询报表
///
///
///
///
///
///
///
///
///
public static List GetReportQueryByRequir(string projectId,string unitId,string unitWorkId, string pipeLineId, string material, string startTime,string endTime)
{
List listStr = new List();
listStr.Add(new SqlParameter("@projectId", projectId));
if (!string.IsNullOrEmpty(pipeLineId))
{
listStr.Add(new SqlParameter("@pipeLineId", pipeLineId));
}
else if (!string.IsNullOrEmpty(unitWorkId) && string.IsNullOrEmpty(pipeLineId))
{
listStr.Add(new SqlParameter("@unitWorkId", unitWorkId));
}
else if (!string.IsNullOrEmpty(unitId) && string.IsNullOrEmpty(unitWorkId) && string.IsNullOrEmpty(pipeLineId))
{
listStr.Add(new SqlParameter("@unitId", unitId));
}
if (!string.IsNullOrEmpty(material))
{
listStr.Add(new SqlParameter("@material", material));
}
else
{
listStr.Add(new SqlParameter("@material", null));
}
if (!string.IsNullOrEmpty(startTime))
{
listStr.Add(new SqlParameter("@startTime", Convert.ToDateTime(startTime)));
}
else
{
listStr.Add(new SqlParameter("@startTime", null));
}
if (!string.IsNullOrEmpty(endTime))
{
listStr.Add(new SqlParameter("@endTime", Convert.ToDateTime(endTime)));
}
else
{
listStr.Add(new SqlParameter("@endTime", null));
}
SqlParameter[] parameter = listStr.ToArray();
DataTable dt = null;
if (string.IsNullOrEmpty(unitId) && string.IsNullOrEmpty(unitWorkId) && string.IsNullOrEmpty(pipeLineId))
{
dt = SQLHelper.GetDataTableRunProc("sp_ReportQueryByProject", parameter);
}
if (!string.IsNullOrEmpty(unitId) && string.IsNullOrEmpty(unitWorkId) && string.IsNullOrEmpty(pipeLineId))
{
dt = SQLHelper.GetDataTableRunProc("sp_ReportQueryByUnit", parameter);
}
if (!string.IsNullOrEmpty(unitWorkId) && string.IsNullOrEmpty(pipeLineId))
{
dt = SQLHelper.GetDataTableRunProc("sp_ReportQueryByUnitWork", parameter);
}
if (!string.IsNullOrEmpty(pipeLineId))
{
dt = SQLHelper.GetDataTableRunProc("sp_ReportQueryByPipeLine", parameter);
}
List reportList = new List();
foreach (DataRow row in dt.Rows)
{
string totalJot = row["TotalJot"].ToString();
string totalDin = row["TotalDin"].ToString();
string weldedJot = row["weldedJot"].ToString();
string weldedDin = row["weldedDin"].ToString();
string oneCheckJotNum = row["OneCheckJotNum"].ToString();
string oneCheckRepairJotNum = row["OneCheckRepairJotNum"].ToString();
string expandJotNum = row["OneExpandJotNum"].ToString();
Model.ReportQueryItem report = new Model.ReportQueryItem();
string code = string.Empty;
int mustCheckJotNum = 0;
if (string.IsNullOrEmpty(unitId) && string.IsNullOrEmpty(unitWorkId) && string.IsNullOrEmpty(pipeLineId))
{
mustCheckJotNum = GetMustCheckJotNum("1", row["ProjectId"].ToString());
code = row["ProjectCode"].ToString();
report.ProjectCode = row["ProjectCode"].ToString();
}
if (!string.IsNullOrEmpty(unitId) && string.IsNullOrEmpty(unitWorkId) && string.IsNullOrEmpty(pipeLineId))
{
mustCheckJotNum = GetMustCheckJotNum("2", row["UnitId"].ToString());
report.CUnit = row["UnitCode"].ToString();
}
if (!string.IsNullOrEmpty(unitWorkId) && string.IsNullOrEmpty(pipeLineId))
{
mustCheckJotNum = GetMustCheckJotNum("3", row["UnitWorkId"].ToString());
report.UnitWork = row["UnitWorkCode"].ToString();
}
if (!string.IsNullOrEmpty(pipeLineId))
{
mustCheckJotNum = GetMustCheckJotNum("4", row["PipelineId"].ToString());
report.PipeLine = row["PipelineCode"].ToString();
}
string weldingRate = "0.0%";
if (totalJot != "0")
{
weldingRate = (Convert.ToInt32(weldedJot) * 100.0 / Convert.ToInt32(totalJot)).ToString() + "%";
}
string weldingOnePassRate = "0.0%";
if (oneCheckJotNum != "0")
{
weldingOnePassRate=((Convert.ToInt32(oneCheckJotNum)-Convert.ToInt32(oneCheckRepairJotNum))*100.0/ Convert.ToInt32(oneCheckJotNum)).ToString() + "%";
}
string checkCompRate = "0.0%";
if (mustCheckJotNum != 0)
{
checkCompRate = (Convert.ToInt32(oneCheckJotNum) * 100.0 / mustCheckJotNum).ToString() + "%";
}
report.TotalJotDin = totalJot + "/" + totalDin;
report.WeldedJotDin = weldedJot + "/" + weldedDin;
report.WeldingRate = weldingRate;
report.WeldingOnePassRate = weldingOnePassRate;
report.MustCheckJotNum = mustCheckJotNum.ToString();
report.CheckedJotNum = oneCheckJotNum;
report.CheckCompRate = checkCompRate;
report.RepairJotNum = oneCheckRepairJotNum;
report.ExpandJotNum = expandJotNum;
reportList.Add(report);
}
return reportList;
}
#endregion
///
/// 获取应检测焊口数
///
/// 1-施工单位,2-单位工程,3-管线
///
///
private static int GetMustCheckJotNum(string flag, string id)
{
int num = 0;
List pipeList = null;
if (flag == "1")
{
pipeList = (from x in Funs.DB.HJGL_Pipeline where x.ProjectId == id select x).ToList();
}
if (flag == "2")
{
pipeList = (from x in Funs.DB.HJGL_Pipeline where x.UnitId == id select x).ToList();
}
if (flag == "3")
{
pipeList = (from x in Funs.DB.HJGL_Pipeline where x.UnitWorkId == id select x).ToList();
}
if (flag == "4")
{
pipeList = (from x in Funs.DB.HJGL_Pipeline where x.PipelineId == id select x).ToList();
}
foreach (var pipe in pipeList)
{
var rate = BLL.Base_DetectionRateService.GetDetectionRateByDetectionRateId(pipe.DetectionRateId);
int jointNum = (from x in Funs.DB.HJGL_WeldJoint where x.PipelineId == pipe.PipelineId select x).Count();
decimal n = Convert.ToDecimal(jointNum * rate.DetectionRateValue * 1.0 / 100);
num = num + Convert.ToInt32(Math.Ceiling(n));
}
return num;
}
}
}