484 lines
26 KiB
C#
484 lines
26 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Data;
|
||
using System.Data.SqlClient;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using Model;
|
||
|
||
namespace BLL
|
||
{
|
||
public static class APIReportQueryService
|
||
{
|
||
#region 根据人员二维码获取焊工业绩
|
||
/// <summary>
|
||
/// 根据人员二维码获取焊工业绩
|
||
/// </summary>
|
||
/// <param name="personId"></param>
|
||
/// <returns></returns>
|
||
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 根据焊工号获取焊工业绩
|
||
/// <summary>
|
||
/// 根据焊工号获取焊工业绩
|
||
/// </summary>
|
||
/// <param name="projectId"></param>
|
||
/// <param name="welderCode"></param>
|
||
/// <returns></returns>
|
||
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获取焊工合格项目
|
||
/// <summary>
|
||
/// 根据人员ID获取焊工合格项目
|
||
/// </summary>
|
||
/// <param name="personId"></param>
|
||
/// <returns></returns>
|
||
public static List<Model.BaseInfoItem> 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 焊工资质预警
|
||
/// <summary>
|
||
/// 焊工资质预警
|
||
/// </summary>
|
||
/// <param name="projectId"></param>
|
||
/// <returns></returns>
|
||
public static List<Model.BaseInfoItem> 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<Model.BaseInfoItem> warnWelder = new List<Model.BaseInfoItem>();
|
||
|
||
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%预警
|
||
/// <summary>
|
||
/// 焊工一次合格率低于96%预警
|
||
/// </summary>
|
||
/// <param name="projectId"></param>
|
||
/// <returns></returns>
|
||
public static List<Model.BaseInfoItem> 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<SqlParameter> listStr = new List<SqlParameter>();
|
||
|
||
|
||
strSql += " AND welder.ProjectId=@ProjectId";
|
||
listStr.Add(new SqlParameter("@ProjectId", projectId));
|
||
|
||
SqlParameter[] parameter = listStr.ToArray();
|
||
DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
|
||
|
||
List<Model.BaseInfoItem> warnWelder = new List<Model.BaseInfoItem>();
|
||
|
||
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获取焊口信息和焊接信息
|
||
/// <summary>
|
||
/// 根据焊口ID获取焊口信息和焊接信息
|
||
/// </summary>
|
||
/// <param name="weldJointId"></param>
|
||
/// <returns></returns>
|
||
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 多维度查询报表
|
||
/// <summary>
|
||
/// 多维度查询报表
|
||
/// </summary>
|
||
/// <param name="projectId"></param>
|
||
/// <param name="unitId"></param>
|
||
/// <param name="unitWorkId"></param>
|
||
/// <param name="pipeLineId"></param>
|
||
/// <param name="material"></param>
|
||
/// <param name="startTime"></param>
|
||
/// <param name="endTime"></param>
|
||
/// <returns></returns>
|
||
public static List<Model.ReportQueryItem> GetReportQueryByRequir(string projectId, string unitId, string unitWorkId, string pipeLineId, string material, string startTime, string endTime)
|
||
{
|
||
List<SqlParameter> listStr = new List<SqlParameter>();
|
||
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<Model.ReportQueryItem> reportList = new List<Model.ReportQueryItem>();
|
||
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
|
||
|
||
/// <summary>
|
||
/// 获取应检测焊口数
|
||
/// </summary>
|
||
/// <param name="flag">1-施工单位,2-单位工程,3-管线</param>
|
||
/// <param name="id"></param>
|
||
/// <returns></returns>
|
||
private static int GetMustCheckJotNum(string flag, string id)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
int num = 0;
|
||
List<Model.HJGL_Pipeline> pipeList = null;
|
||
if (flag == "1")
|
||
{
|
||
pipeList = (from x in db.HJGL_Pipeline where x.ProjectId == id select x).ToList();
|
||
}
|
||
if (flag == "2")
|
||
{
|
||
pipeList = (from x in db.HJGL_Pipeline where x.UnitId == id select x).ToList();
|
||
}
|
||
if (flag == "3")
|
||
{
|
||
pipeList = (from x in db.HJGL_Pipeline where x.UnitWorkId == id select x).ToList();
|
||
}
|
||
if (flag == "4")
|
||
{
|
||
pipeList = (from x in db.HJGL_Pipeline where x.PipelineId == id select x).ToList();
|
||
}
|
||
|
||
foreach (var pipe in pipeList)
|
||
{
|
||
var rate = db.Base_DetectionRate.FirstOrDefault(e => e.DetectionRateId == pipe.DetectionRateId);
|
||
int jointNum = (from x in db.HJGL_WeldJoint where x.PipelineId == pipe.PipelineId select x).Count();
|
||
int DetectionRateValue = int.Parse(rate.DetectionRateValue);
|
||
decimal n = Convert.ToDecimal(1.0 * jointNum * DetectionRateValue / 100);
|
||
num = num + Convert.ToInt32(Math.Ceiling(n));
|
||
}
|
||
return num;
|
||
}
|
||
}
|
||
}
|
||
}
|