xinjiang/SGGL/BLL/API/HJGL/APIReportQueryService.cs

480 lines
23 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
/// <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)
{
int num = 0;
List<Model.HJGL_Pipeline> 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();
int DetectionRateValue = int.Parse(rate.DetectionRateValue);
decimal n = Convert.ToDecimal(1.0 * jointNum * DetectionRateValue / 100);
num = num + Convert.ToInt32(Math.Ceiling(n));
}
return num;
}
}
}