shgx_tz_mom/ZR.Service/mes/op/OperationService.cs

219 lines
9.7 KiB
C#

using Infrastructure.Attribute;
using SqlSugar;
using System;
using ZR.Model.MES.op.DTO;
using ZR.Model.MES.op.ZR.Model.mes.md;
using ZR.Model.MES.pro;
using ZR.Model.MES.qc;
using ZR.Model.MES.qu;
using ZR.Service.MES.op.IService;
namespace ZR.Service.MES.op
{
[AppService(ServiceType = typeof(IOperationService), ServiceLifetime = LifeTime.Transient)]
public class OperationService : BaseService<OpStatistics>, IOperationService
{
public List<OpStatisticsDTO> GetAllData(string workshopID)
{
decimal myDecimal = 123.456789m;
string formattedDecimal = myDecimal.ToString("0.00"); // 保留两位小数
List<OpStatisticsDTO> OpStatisticsDTOList = new List<OpStatisticsDTO>();
List<OpStatistics> OpStatisticsList = Queryable().Where(it => it.WorkshopId == workshopID).ToList();
foreach (var OpStatistics in OpStatisticsList)
{
OpStatisticsDTO opStatisticsDTO = new OpStatisticsDTO();
opStatisticsDTO.WorkshopId = OpStatistics.WorkshopId;
opStatisticsDTO.WorkshopName = OpStatistics.WorkshopName;
opStatisticsDTO.ProductDate = OpStatistics.ProductDate;
opStatisticsDTO.PlanNum = OpStatistics.PlanNum;
opStatisticsDTO.ProductedNum = OpStatistics.ProductedNum;
decimal num1 = (decimal)OpStatistics.ProductedNum / (decimal)OpStatistics.PlanNum * 100;
opStatisticsDTO.ProductProgressRate = (int)num1;
opStatisticsDTO.GoodproductsNum = OpStatistics.GoodproductsNum;
opStatisticsDTO.DefectiveProductsNum = OpStatistics.DefectiveProductsNum;
decimal num2 = (decimal)OpStatistics.DefectiveProductsNum / (decimal)(OpStatistics.GoodproductsNum + OpStatistics.DefectiveProductsNum);
opStatisticsDTO.QualityRate = num2.ToString("f2");
opStatisticsDTO.ProductStarttime = OpStatistics.ProductStarttime;
opStatisticsDTO.ProductEndtime = OpStatistics.ProductEndtime;
if (DateTime.Now > opStatisticsDTO.ProductStarttime && DateTime.Now < opStatisticsDTO.ProductEndtime)
{
opStatisticsDTO.isProducting = true;
}
else
{
opStatisticsDTO.isProducting = false;
}
opStatisticsDTO.numSort = OpStatisticsList.IndexOf(OpStatistics);
opStatisticsDTO.LineId = OpStatistics.LineId;
opStatisticsDTO.LineName = OpStatistics.LineName;
opStatisticsDTO.ProductEndtime = OpStatistics.ProductEndtime;
OpStatisticsDTOList.Add(opStatisticsDTO);
}
return OpStatisticsDTOList;
}
/// <summary>
/// 质量统计分析表和工单关联一下
/// </summary>
/// <param name="workorderid"></param>
/// <param name="pageNum"></param>
/// <param name="pageSize"></param>
/// <param name="year"></param>
/// <param name="week"></param>
/// <param name="date"></param>
/// <returns></returns>
public (List<QcFqcDTO>, int) GueryQualityStatistics(string workorderid, int pageNum, int pageSize, int year = -1, int week = -1, int date = -1)
{
var predicate = Expressionable.Create<QcFqcDTO>()
.AndIF(year > 0, p => p.Year == year)
.AndIF(week > 0, p => p.Week == week)
.AndIF(date > 0, p => p.Date == date)
.ToExpression();
var predicate2 = Expressionable.Create<QcFqc>()
.AndIF(!string.IsNullOrEmpty(workorderid), q => q.FkWorkorderId == workorderid)
.ToExpression();
int totalCount = 0;
var query5 = Context.Queryable<QcFqc>()
.LeftJoin<ProWorkorder_v2>((q, p) => q.FkWorkorderId == p.Id)
.Where(predicate2)
.Select((q, p) => new QcFqcDTO
{
Year = p.Year,
Week = p.Week,
Date = p.Date,
Id = q.Id,
FkWorkorderId = q.FkWorkorderId,
ProductName = q.ProductName,
Color = q.Color,
Require = q.Require,
LeftRight = q.LeftRight,
Team = q.Team,
QualifiedNum01 = q.QualifiedNum01,
DefectNum01 = q.DefectNum01,
PolishNum01 = q.PolishNum01,
ScrapNum01 = q.ScrapNum01,
QualifiedNum02 = q.QualifiedNum02,
PolishNum02 = q.PolishNum02,
ScrapNum02 = q.ScrapNum02,
QualifiedNum03 = q.QualifiedNum03,
PolishNum03 = q.PolishNum03,
ScrapNum03 = q.ScrapNum03,
FirstgoodNum = q.FirstgoodNum,
FirstgoodRate = q.FirstgoodRate,
FinalgoodRate = q.FinalgoodRate,
FinalgoodNum = q.FinalgoodNum,
}).MergeTable();
List<QcFqcDTO> QcFqcDTOList = query5.Where(predicate).ToPageList(pageNum, pageSize, ref totalCount);
return (QcFqcDTOList, totalCount);
}
/// <summary>
/// 获取工单 缺陷详细信息
/// </summary>
/// <param name="fkWorkorderId"></param>
/// <param name="order"></param>
/// <returns></returns>
public List<DetailsOfDetectionDTO> QueryDetailsOfDetection(string fkWorkorderId, int order)
{
List<DetailsOfDetectionDTO> detailsList = null;
switch (order)
{
case 1:
// 首检抛光数量
detailsList = Context.Queryable<QcFirstinspectionRecord>().LeftJoin<QcInspectionitem>((f, i) => SqlFunc.ToInt32(f.FKInpectionId) == i.Id).Where(f => SqlFunc.Like(f.FKInpectionId, "_1_")).Where(f => f.FKWorkorderId == fkWorkorderId)
.Select((f, i) => new DetailsOfDetectionDTO
{
InspectionName = i.InspectionName,
Counter = (int)f.Counter,
}).ToList(); break;
case 2:
// 首检打磨数量
detailsList = Context.Queryable<QcFirstinspectionRecord>().LeftJoin<QcInspectionitem>((f, i) => SqlFunc.ToInt32(f.FKInpectionId) == i.Id).Where(f => SqlFunc.Like(f.FKInpectionId, "_2_"))
.Select((f, i) => new DetailsOfDetectionDTO
{
InspectionName = i.InspectionName,
Counter = (int)f.Counter,
}).ToList();
break;
case 3:
// 首检报废数量
detailsList = Context.Queryable<QcFirstinspectionRecord>().LeftJoin<QcInspectionitem>((f, i) => SqlFunc.ToInt32(f.FKInpectionId) == i.Id).Where(f => SqlFunc.Like(f.FKInpectionId, "_3_"))
.Select((f, i) => new DetailsOfDetectionDTO
{
InspectionName = i.InspectionName,
Counter = (int)f.Counter,
}).ToList();
break;
case 4:
// 二检打磨数量
detailsList = Context.Queryable<QcAgaininspectionRecord>().LeftJoin<QcInspectionitem>((f, i) => SqlFunc.ToInt32(f.FkInpectionId) == i.Id).Where(f => SqlFunc.Like(f.FkInpectionId, "_2_"))
.Select((f, i) => new DetailsOfDetectionDTO
{
InspectionName = i.InspectionName,
Counter = (int)f.Counter,
}).ToList();
break;
case 5:
// 二检报废数量
detailsList = Context.Queryable<QcAgaininspectionRecord>().LeftJoin<QcInspectionitem>((f, i) => SqlFunc.ToInt32(f.FkInpectionId) == i.Id).Where(f => SqlFunc.Like(f.FkInpectionId, "_3_"))
.Select((f, i) => new DetailsOfDetectionDTO
{
InspectionName = i.InspectionName,
Counter = (int)f.Counter,
}).ToList();
break;
case 6:
// 三检打磨数量
detailsList = Context.Queryable<QcFinalinspectionRecord>().LeftJoin<QcInspectionitem>((f, i) => SqlFunc.ToInt32(f.FkInpectionId) == i.Id).Where(f => SqlFunc.Like(f.FkInpectionId, "_2_"))
.Select((f, i) => new DetailsOfDetectionDTO
{
InspectionName = i.InspectionName,
Counter = (int)f.Counter,
}).ToList();
break;
case 7:
// 三检报废数量
detailsList = Context.Queryable<QcFinalinspectionRecord>().LeftJoin<QcInspectionitem>((f, i) => SqlFunc.ToInt32(f.FkInpectionId) == i.Id).Where(f => SqlFunc.Like(f.FkInpectionId, "_3_"))
.Select((f, i) => new DetailsOfDetectionDTO
{
InspectionName = i.InspectionName,
Counter = (int)f.Counter,
}).ToList();
break;
default: break;
}
return detailsList;
}
}
}