2023-12-01 15:39:07 +08:00
using Infrastructure.Attribute ;
using Microsoft.Extensions.DependencyInjection ;
2023-12-18 16:01:17 +08:00
using SqlSugar ;
2023-12-01 15:39:07 +08:00
using System ;
2023-12-12 22:26:20 +08:00
using System.Collections ;
2023-12-01 15:39:07 +08:00
using System.Collections.Generic ;
using System.Diagnostics ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
2023-12-12 22:26:20 +08:00
using ZR.Model.MES.qc ;
2023-12-01 15:39:07 +08:00
using ZR.Model.MES.qc.DTO ;
using ZR.Model.MES.qu ;
using ZR.Service.mes.qc.IService ;
using ZR.Service.mes.qu.IService ;
2023-12-18 16:01:17 +08:00
using static Microsoft . Extensions . Logging . EventSource . LoggingEventSource ;
2023-12-01 15:39:07 +08:00
namespace ZR.Service.mes.qc
{
[AppService(ServiceType = typeof(IFirstFQCService), ServiceLifetime = LifeTime.Transient)]
public class FirstFQCService : BaseService < QcInspectionitem > , IFirstFQCService
{
public CheckItemTableDTO GetCheckItemTable ( )
{
2023-12-12 22:26:20 +08:00
CheckItemTableDTO checkItem = new CheckItemTableDTO ( ) ;
checkItem . Paint = Queryable ( ) . Where ( it = > it . InspectionModule = = "油漆" ) . OrderBy ( it = > it . Id ) . ToList ( ) ;
2023-12-01 15:39:07 +08:00
checkItem . device = Queryable ( ) . Where ( it = > it . InspectionModule = = "设备" ) . OrderBy ( it = > it . Id ) . ToList ( ) ;
checkItem . Blank = Queryable ( ) . Where ( it = > it . InspectionModule = = "毛坯" ) . OrderBy ( it = > it . Id ) . ToList ( ) ;
checkItem . program = Queryable ( ) . Where ( it = > it . InspectionModule = = "程序" ) . OrderBy ( it = > it . Id ) . ToList ( ) ;
checkItem . Team = Queryable ( ) . Where ( it = > it . InspectionModule = = "班组操作" ) . OrderBy ( it = > it . Id ) . ToList ( ) ;
return checkItem ;
}
2023-12-12 22:26:20 +08:00
/// <summary>
2023-12-18 16:01:17 +08:00
/// 保存首次检测结果
2023-12-12 22:26:20 +08:00
/// </summary>
2023-12-18 16:01:17 +08:00
/// <param name="workorder_id">工单</param>
/// <param name="InspectionModule">模块</param>
/// <param name="inspectItem">检测项</param>
/// <param name="counter">数量</param>
2023-12-12 22:26:20 +08:00
/// <returns></returns>
2023-12-18 16:01:17 +08:00
public async Task SaveinspectItem_v1 ( string workorder_id , string InspectionModule , string checkid , int counter )
2023-12-12 22:26:20 +08:00
{
//更新实时记录表
QcFirstinspectionRecord record = new QcFirstinspectionRecord ( ) ;
record . Id = DateTime . Now . ToString ( "MMddHHmmss" ) ;
record . InspectionModule = InspectionModule ;
record . FKWorkorderId = workorder_id ;
2023-12-18 16:01:17 +08:00
record . FKInpectionId = checkid . Substring ( 0 , 3 ) ;
record . Counter = counter ;
record . UpdatedTime = DateTime . Now ;
var x = Context . Storageable ( record )
. WhereColumns ( it = > new { it . FKInpectionId , it . FKWorkorderId , it . InspectionModule } )
. ToStorage ( ) ;
x . AsInsertable . ExecuteCommandAsync ( ) ; //执行插入
x . AsUpdateable . ExecuteCommandAsync ( ) ; //执行更新
////更新初检报废表
//if (Convert.ToInt32(checkid) / 10 % 10==3)
//{
// QcAgaininspectionUselessnum scrap =new QcAgaininspectionUselessnum();
// scrap.Id = "scrap" + DateTime.Now.ToString("MMddHHmmss");
// scrap.FkInspectionitemId = checkid;
// scrap.FkFqcId = "";
// scrap.ProductName = "";
// scrap.Number= 1;
//}
////更新初检xiazi表
//if (Convert.ToInt32(checkid) / 10 % 10 == 1)
//{
//}
}
/// <summary>
/// 保存二次检测结果
/// </summary>
/// <param name="workorder_id">工单</param>
/// <param name="InspectionModule">模块</param>
/// <param name="inspectItem">检测项</param>
/// <param name="counter">数量</param>
/// <returns></returns>
public async Task SaveinspectItem_v2 ( string workorder_id , string InspectionModule , string checkid , int counter )
{
//更新实时记录表
QcAgaininspectionRecord record = new QcAgaininspectionRecord ( ) ;
record . Id = DateTime . Now . ToString ( "MMddHHmmss" ) ;
record . InspectionModule = InspectionModule ;
record . FkWorkorderId = workorder_id ;
record . FkInpectionId = checkid . Substring ( 0 , 3 ) ;
record . Counter = counter ;
record . UpdatedTime = DateTime . Now ;
var x = Context . Storageable ( record )
. WhereColumns ( it = > new { it . FkInpectionId , it . FkWorkorderId , it . InspectionModule } )
. ToStorage ( ) ;
x . AsInsertable . ExecuteCommandAsync ( ) ; //执行插入
x . AsUpdateable . ExecuteCommandAsync ( ) ; //执行更新
////更新初检报废表
//if (Convert.ToInt32(checkid) / 10 % 10==3)
//{
// QcAgaininspectionUselessnum scrap =new QcAgaininspectionUselessnum();
// scrap.Id = "scrap" + DateTime.Now.ToString("MMddHHmmss");
// scrap.FkInspectionitemId = checkid;
// scrap.FkFqcId = "";
// scrap.ProductName = "";
// scrap.Number= 1;
//}
////更新初检xiazi表
//if (Convert.ToInt32(checkid) / 10 % 10 == 1)
//{
//}
}
/// <summary>
/// 保存最终检测结果
/// </summary>
/// <param name="workorder_id">工单</param>
/// <param name="InspectionModule">模块</param>
/// <param name="inspectItem">检测项</param>
/// <param name="counter">数量</param>
/// <returns></returns>
public async Task SaveinspectItem_v3 ( string workorder_id , string InspectionModule , string checkid , int counter )
{
//更新实时记录表
QcFinalinspectionRecord record = new QcFinalinspectionRecord ( ) ;
record . Id = DateTime . Now . ToString ( "MMddHHmmss" ) ;
record . InspectionModule = InspectionModule ;
record . FkWorkorderId = workorder_id ;
record . FkInpectionId = checkid . Substring ( 0 , 3 ) ;
2023-12-12 22:26:20 +08:00
record . Counter = counter ;
2023-12-18 16:01:17 +08:00
record . UpdatedTime = DateTime . Now ;
2023-12-12 22:26:20 +08:00
var x = Context . Storageable ( record )
2023-12-18 16:01:17 +08:00
. WhereColumns ( it = > new { it . FkInpectionId , it . FkWorkorderId , it . InspectionModule } )
2023-12-12 22:26:20 +08:00
. ToStorage ( ) ;
2023-12-18 16:01:17 +08:00
x . AsInsertable . ExecuteCommandAsync ( ) ; //执行插入
x . AsUpdateable . ExecuteCommandAsync ( ) ; //执行更新
2023-12-12 22:26:20 +08:00
////更新初检报废表
//if (Convert.ToInt32(checkid) / 10 % 10==3)
//{
// QcAgaininspectionUselessnum scrap =new QcAgaininspectionUselessnum();
// scrap.Id = "scrap" + DateTime.Now.ToString("MMddHHmmss");
// scrap.FkInspectionitemId = checkid;
// scrap.FkFqcId = "";
// scrap.ProductName = "";
// scrap.Number= 1;
//}
////更新初检xiazi表
//if (Convert.ToInt32(checkid) / 10 % 10 == 1)
//{
//}
}
2023-12-18 16:01:17 +08:00
/// <summary>
/// 当产品切换时,完成质量统计分析
/// </summary>
/// <param name="workorderid">工单</param>
/// <param name="productName">产品名称</param>
/// <param name="leftRight">左右</param>
/// <param name="color">颜色</param>
/// <param name="team">班组</param>
/// <param name="inputNum">投入数</param>
public void quailtyStatics ( string workorderid , string productName , string leftRight , string color , string team , int inputNum )
{
QcFqc record = new QcFqc ( ) ;
record . Id = DateTime . Now . ToString ( "MMddHHmmss" ) ;
record . ProductName = productName ;
record . LeftRight = leftRight ;
record . Color = color ;
record . Team = team ;
//TODO 1. 处理首检
//1.1 首检合格数=投入数-抛光数-打磨数-报废数
List < QcFirstinspectionRecord > qcFirstinspections = Context . Queryable < QcFirstinspectionRecord > ( ) . Where ( it = > it . FKWorkorderId = = workorderid ) . ToList ( ) ;
int NoQualifiedNum01 = 0 ;
qcFirstinspections . ForEach ( it = >
{
NoQualifiedNum01 + = ( int ) it . Counter ;
} ) ;
record . QualifiedNum01 = inputNum - NoQualifiedNum01 ;
//1.2 首检抛光数
List < QcFirstinspectionRecord > defectNum01RecordList = Context . Queryable < QcFirstinspectionRecord > ( ) . Where ( it = > it . FKWorkorderId = = workorderid ) . Where ( "FKInpectionId like @FKInpectionId" , new { FKInpectionId = "_" + 1 + "_" } ) . ToList ( ) ;
int defectNum01RecordSum = 0 ;
defectNum01RecordList . ForEach ( it = >
{
defectNum01RecordSum + = ( int ) it . Counter ;
} ) ;
record . DefectNum01 = defectNum01RecordSum ;
//1.3 首检打磨数
List < QcFirstinspectionRecord > polishNum01RecordList = Context . Queryable < QcFirstinspectionRecord > ( ) . Where ( it = > it . FKWorkorderId = = workorderid ) . Where ( "FKInpectionId like @FKInpectionId" , new { FKInpectionId = "_" + 2 + "_" } ) . ToList ( ) ;
int polishNum01RecordSum = 0 ;
polishNum01RecordList . ForEach ( it = >
{
polishNum01RecordSum + = ( int ) it . Counter ;
} ) ;
record . PolishNum01 = polishNum01RecordSum ;
2023-12-12 22:26:20 +08:00
2023-12-18 16:01:17 +08:00
//1.4 首检报废数
List < QcFirstinspectionRecord > scrapNum01RecordList = Context . Queryable < QcFirstinspectionRecord > ( ) . Where ( it = > it . FKWorkorderId = = workorderid ) . Where ( "FKInpectionId like @FKInpectionId" , new { FKInpectionId = "_" + 3 + "_" } ) . ToList ( ) ;
int scrapNum01RecordSum = 0 ;
scrapNum01RecordList . ForEach ( it = >
{
scrapNum01RecordSum + = ( int ) it . Counter ;
} ) ;
record . PolishNum01 = scrapNum01RecordSum ;
2023-12-12 22:26:20 +08:00
2023-12-18 16:01:17 +08:00
//TODO 2. 处理二检
//2.1 二检的合格数 = 首检的抛光数 - 二检打磨 - 二检报废
List < QcAgaininspectionRecord > qcAgaininspections = Context . Queryable < QcAgaininspectionRecord > ( ) . Where ( it = > it . FkWorkorderId = = workorderid ) . ToList ( ) ;
int NoQualifiedNum02 = 0 ;
qcAgaininspections . ForEach ( it = >
{
NoQualifiedNum02 + = ( int ) it . Counter ;
} ) ;
record . QualifiedNum02 = defectNum01RecordSum - NoQualifiedNum02 ;
//2.2 二检打磨数
List < QcAgaininspectionRecord > polishNum02RecordList = Context . Queryable < QcAgaininspectionRecord > ( ) . Where ( it = > it . FkWorkorderId = = workorderid ) . Where ( "FKInpectionId like @FKInpectionId" , new { FKInpectionId = "_" + 2 + "_" } ) . ToList ( ) ;
int polishNum02RecordSum = 0 ;
polishNum02RecordList . ForEach ( it = >
{
polishNum02RecordSum + = ( int ) it . Counter ;
} ) ;
record . PolishNum02 = polishNum02RecordSum ;
//2.3 二检报废
List < QcAgaininspectionRecord > scrapNum02RecordList = Context . Queryable < QcAgaininspectionRecord > ( ) . Where ( it = > it . FkWorkorderId = = workorderid ) . Where ( "FKInpectionId like @FKInpectionId" , new { FKInpectionId = "_" + 3 + "_" } ) . ToList ( ) ;
int scrapNum02RecordSum = 0 ;
scrapNum02RecordList . ForEach ( it = >
{
scrapNum02RecordSum + = ( int ) it . Counter ;
} ) ;
record . ScrapNum02 = scrapNum02RecordSum ;
//TODO 3. 处理三检
// 3.1 三检合格数=(一检合格数 + 二检合格数) - (三检打磨数+三检报废数)
List < QcFinalinspectionRecord > qcFinalinspections = Context . Queryable < QcFinalinspectionRecord > ( ) . Where ( it = > it . FkWorkorderId = = workorderid ) . ToList ( ) ;
int NoQualifiedNum03 = 0 ;
qcAgaininspections . ForEach ( it = >
{
NoQualifiedNum03 + = ( int ) it . Counter ;
} ) ;
record . QualifiedNum03 = ( record . QualifiedNum01 + record . QualifiedNum02 ) - NoQualifiedNum03 ;
//3.2 三检打磨数
List < QcFinalinspectionRecord > polishNum03RecordList = Context . Queryable < QcFinalinspectionRecord > ( ) . Where ( it = > it . FkWorkorderId = = workorderid ) . Where ( "FKInpectionId like @FKInpectionId" , new { FKInpectionId = "_" + 2 + "_" } ) . ToList ( ) ;
int polishNum03RecordSum = 0 ;
polishNum03RecordList . ForEach ( it = >
{
polishNum03RecordSum + = ( int ) it . Counter ;
} ) ;
record . PolishNum03 = polishNum03RecordSum ;
//3.3 三检报废数
List < QcFinalinspectionRecord > scrapNum03RecordList = Context . Queryable < QcFinalinspectionRecord > ( ) . Where ( it = > it . FkWorkorderId = = workorderid ) . Where ( "FKInpectionId like @FKInpectionId" , new { FKInpectionId = "_" + 3 + "_" } ) . ToList ( ) ;
int scrapNum03RecordSum = 0 ;
scrapNum03RecordList . ForEach ( it = >
{
scrapNum03RecordSum + = ( int ) it . Counter ;
} ) ;
record . ScrapNum03 = scrapNum03RecordSum ;
//TODO 4 统计分析
// 4.1 一次合格率
record . FirstgoodNum = record . QualifiedNum01 ;
record . FirstgoodRate = CalculatePercentage ( ( int ) record . FirstgoodNum , inputNum ) ;
// 4.2 最终合格率
record . FinalgoodNum = record . QualifiedNum03 / inputNum ;
record . FinalgoodRate = CalculatePercentage ( ( int ) record . FinalgoodNum , inputNum ) ;
// 4.3 报废率
record . ScrapNum = record . ScrapNum01 + record . ScrapNum02 + record . ScrapNum03 ;
record . ScrapRate = CalculatePercentage ( ( int ) record . ScrapNum , inputNum ) ;
record . CreatedTime = DateTime . Now ;
Context . Insertable < QcFqc > ( record ) . ExecuteCommand ( ) ;
}
/// <summary>
/// 计算百分比
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
static double CalculatePercentage ( int num1 , int num2 )
{
double percentage = ( ( double ) num1 / num2 ) * 100 ;
return Math . Round ( percentage , 2 ) ;
}
2023-12-01 15:39:07 +08:00
}
}