add-成品下线质检

dev
liuwf 1 year ago
parent 275ab8da3e
commit 7f173b2bed

@ -0,0 +1,20 @@
using Admin.Core.Model;
using Admin.Core.Model.Model_New;
using Admin.Core.Model.ViewModels;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Admin.Core.IRepository
{
/// <summary>
/// 质检记录
/// </summary>
public interface IReportQualityInspectionRepository : IBaseRepository<ReportQualityInsPection>
{
}
}

@ -0,0 +1,21 @@
using Admin.Core.Model;
using Admin.Core.Model.ViewModels;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Admin.Core.IService
{
/// <summary>
/// 质检记录
/// </summary>
public interface IReportQualityInspectionServices : IBaseServices<ReportQualityInsPection>
{
/// <summary>
/// 判断是否有不合格质检项
/// </summary>
/// <returns></returns>
List<ReportQualityInsPection> JudgeIsQualified(string barCode);
}
}

@ -0,0 +1,117 @@
using NPOI.SS.Formula.Functions;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Admin.Core.Model
{
/// <summary>
/// 质检记录
/// </summary>
[SugarTable("REPORT_QUALITY_INSPECTION", "AUCMA_MES")]
public class ReportQualityInsPection
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(ColumnName = "OBJ_ID", IsIdentity = true, IsPrimaryKey = true, OracleSequenceName = "SEQ_REPORT_QUALITY_INSPECTION")]
public int ObjId { get; set; }
/// <summary>
/// 箱体条码
/// </summary>
[SugarColumn(ColumnName = "BAR_CODE")]
public string BarCode { get; set; }
/// <summary>
/// 物料名称
/// </summary>
[SugarColumn(ColumnName = "MATERIAL_NAME")]
public string MaterialName { get; set; }
/// <summary>
/// 工序编号
/// </summary>
[SugarColumn(ColumnName = "PROCESS_CODE")]
public string ProcessCode { get; set; }
/// <summary>
/// 检测项(工位)编号
/// </summary>
[SugarColumn(ColumnName = "TEST_ITEM_CODE")]
public string TestItemCode { get; set; }
/// <summary>
/// 质量缺陷编码
/// </summary>
[SugarColumn(ColumnName = "QUALITY_DEFECT_CODE")]
public string QualityDefectCode { get; set; }
/// <summary>
/// 质量缺陷名称
/// </summary>
[SugarColumn(ColumnName = "QUALITY_DEFECT_NAME")]
public string QualityDefectName { get; set; }
/// <summary>
/// 质检处理措施3=合格,1=返修)
/// </summary>
[SugarColumn(ColumnName = "TREATMENT_MEASURE")]
public string TreatmentMeasure { get; set; }
/// <summary>
/// 返修处理结果
/// </summary>
[SugarColumn(ColumnName = "PROCESS_RESULT")]
public string ProcessResult { get; set; }
/// <summary>
/// 是否下静态线1-是2-否)
/// </summary>
[SugarColumn(ColumnName = "IS_LOWER_LINE")]
public string IsLowerLine { get; set; }
/// <summary>
/// 班组编号
/// </summary>
[SugarColumn(ColumnName = "GROUP_CODE")]
public string GroupCode { get; set; }
/// <summary>
/// 检测人员
/// </summary>
[SugarColumn(ColumnName = "INSPECTOR_CODE")]
public string InspectorCode { get; set; }
/// <summary>
/// 检测时间
/// </summary>
[SugarColumn(ColumnName = "INSPECTOR_TIME")]
public DateTime InspectorTime { get; set; }
/// <summary>
/// 返修次数
/// </summary>
[SugarColumn(ColumnName = "REWORK_NUMBER")]
public int ReworkNumber { get; set; }
/// <summary>
/// 返修完成时间
/// </summary>
[SugarColumn(ColumnName = "FINISH_TIME")]
public DateTime FinishTime { get; set; }
/// <summary>
/// 返修结果(1=正常,2=异常)
/// </summary>
[SugarColumn(ColumnName = "IS_FLAG")]
public int IsFlag { get; set; }
/// <summary>
/// 更新人
/// </summary>
[SugarColumn(ColumnName = "UPDATED_BY")]
public string UpdatedBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "UPDATED_TIME")]
public DateTime UpdatedTime { get; set; }
/// <summary>
/// 检测人工位编号
/// </summary>
[SugarColumn(ColumnName = "STATION_CODE")]
public string StationCode { get; set; }
}
}

@ -0,0 +1,23 @@
using Admin.Core.IRepository;
using Admin.Core.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Admin.Core.Repository
{
/// <summary>
/// 质检记录
/// </summary>
public class ReportQualityInspectionRepository : BaseRepository<ReportQualityInsPection>, IReportQualityInspectionRepository
{
public ReportQualityInspectionRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
}
}

@ -0,0 +1,49 @@
using Admin.Core.IRepository;
using Admin.Core.IService;
using Admin.Core.Model;
using Admin.Core.Model.Model_New;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Admin.Core.Service
{
/// <summary>
/// 质检记录
/// </summary>
public class ReportQualityInspectionServices : BaseServices<ReportQualityInsPection>, IReportQualityInspectionServices
{
private readonly IBaseRepository<ReportQualityInsPection> _dal;
private readonly IReportQualityInspectionRepository _baseSpaceInfoRepository;
private readonly ICodeBindingRecordRepository _codeBindingRecordRepository;
public ReportQualityInspectionServices(IBaseRepository<ReportQualityInsPection> dal, IReportQualityInspectionRepository reportQualityInspectionRepository, ICodeBindingRecordRepository codeBindingRepository)
{
_baseSpaceInfoRepository = reportQualityInspectionRepository;
_codeBindingRecordRepository = codeBindingRepository;
this._dal = dal;
base.BaseDal = dal;
}
/// <summary>
/// 判断是否有不合格质检项,传入的是SN码
/// </summary>
/// <returns></returns>
public List<ReportQualityInsPection> JudgeIsQualified(string SnCode)
{
try
{
string boxCode = _codeBindingRecordRepository.Query(s => s.ProductCode == SnCode).FirstOrDefault().BoxCode;
var list = _baseSpaceInfoRepository.Query(x=>x.BarCode.Equals(boxCode) && x.IsFlag!=1);
return list;
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
}
}

@ -72,7 +72,8 @@ namespace Aucma.Core.ProductOffLine.Business
private readonly IMaterialCompletionServices? _iMaterialCompletionServices = App.ServiceProvider.GetService<IMaterialCompletionServices>();
private readonly ICodeBindingRecordServices? _codeBindingServices = App.ServiceProvider.GetService<ICodeBindingRecordServices>();
// 质检记录
private readonly IReportQualityInspectionServices? _reportQualityInspectionServices = App.ServiceProvider.GetService<IReportQualityInspectionServices>();
#endregion
#region 委托事件
@ -104,23 +105,23 @@ namespace Aucma.Core.ProductOffLine.Business
public void test()
{
// string result = await _productOffLineServices.QueryChecked("1531000AP0098DCU0481");
// Console.WriteLine(result);
// string tt = "Y@1104@16160030000000910780@000010034895@@ @000000@000000009000004899@BCD-160C,家电下乡@@BCD-160C@皓月白-家电下乡@161601300@160@1-00版@家电下乡产品@默认@2010-09-01";
Task.Run(() =>
{
while(true)
{
Thread.Sleep(50000);
Random random = new Random();
MaterialBarScan("32160030000000912"+random.Next(100,999), "192.168.1.19");
}
// Thread.Sleep(1000);
// MaterialBarScanEvent("33160030000000910780", "192.168.1.20");
});
//Task.Run(() =>
//{
// while(true)
// {
// Thread.Sleep(50000);
// Random random = new Random();
// MaterialBarScan("32160030000000912"+random.Next(100,999), "192.168.1.19");
// }
// // Thread.Sleep(1000);
// // MaterialBarScanEvent("33160030000000910780", "192.168.1.20");
//});
}
/// <summary>
@ -130,60 +131,57 @@ namespace Aucma.Core.ProductOffLine.Business
/// <param name="scannerIp">扫码器IP</param>
public void MaterialBarScan(string code,string scannerIp)
{
try
{
int ScannerNo = scannerIp == Appsettings.app("Middleware", "Scanner1", "Ip") ? 1 : 2; // 确定是哪个扫码器
log.Info("扫码器ip:" + scannerIp +"编号:["+ScannerNo+ "]扫描到条码:" + code);
log.Info("扫码器ip:" + scannerIp + "编号:[" + ScannerNo + "]扫描到条码:" + code);
string materialType = "";
bool BackResult = false;
if (ScannerNo == 1)
{
//1.扫描的SN条码去条码系统校验
BackResult = HandleMaterialBarCode(code.Trim(), TempOffLineInfo1); //扫码器1
materialType = TempOffLineInfo1.ProductCode;
TempOffLineInfo1.MsgInfo = TempOffLineInfo1.MsgInfo + ",plc放行成功";
//界面刷新
TempOffLineInfo1.ProductRefreshFlag = true;
return;
if (!BackResult)
BackResult = HandleMaterialBarCode(code.Trim(), TempOffLineInfo1); //扫码器1
materialType = TempOffLineInfo1.ProductCode;
if (!BackResult)
{
return;
}
// 2.更新mes数据库
BackResult = updateMesData(TempOffLineInfo1);
BackResult = updateMesData(TempOffLineInfo1);
// 3.plc放行
if (BackResult)
{
bool plcResult =SendAndWaitSignal(ScannerNo, materialType);
if (plcResult)
{
TempOffLineInfo1.MsgInfo = TempOffLineInfo1.MsgInfo + "plc放行成功";
//界面刷新
TempOffLineInfo1.ProductRefreshFlag = true;
}
else
{
TempOffLineInfo1.MsgInfo = TempOffLineInfo1.MsgInfo + "plc放行异常";
TempOffLineInfo1.MsgAlarmFlag = true;
//界面刷新
TempOffLineInfo1.ProductRefreshFlag = true;
}
log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo1.ProductOrderNo, TempOffLineInfo1.OrderQty));
bool plcResult = SendAndWaitSignal(ScannerNo, materialType);
if (plcResult)
{
TempOffLineInfo1.MsgInfo = TempOffLineInfo1.MsgInfo + "plc放行成功";
//界面刷新
TempOffLineInfo1.ProductRefreshFlag = true;
}
else
{
TempOffLineInfo1.MsgInfo = TempOffLineInfo1.MsgInfo + "plc放行异常";
TempOffLineInfo1.MsgAlarmFlag = true;
//界面刷新
TempOffLineInfo1.ProductRefreshFlag = true;
}
log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo1.ProductOrderNo, TempOffLineInfo1.OrderQty));
}
}
// 扫码器2
else if (ScannerNo == 2)
{
BackResult = HandleMaterialBarCode(code.Trim(), TempOffLineInfo2); //扫码器2
BackResult = HandleMaterialBarCode(code.Trim(), TempOffLineInfo2); //扫码器2
materialType = TempOffLineInfo2.ProductCode;
if (!BackResult)
{
return;
}
// 2.更新mes数据库
BackResult = updateMesData(TempOffLineInfo2);
BackResult = updateMesData(TempOffLineInfo2);
// 3.plc放行
if (BackResult)
{
@ -191,7 +189,7 @@ namespace Aucma.Core.ProductOffLine.Business
if (plcResult)
{
TempOffLineInfo2.MsgInfo = TempOffLineInfo2.MsgInfo + "plc放行成功";
//界面刷新
TempOffLineInfo2.ProductRefreshFlag = true;
}
@ -204,8 +202,14 @@ namespace Aucma.Core.ProductOffLine.Business
}
log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo2.ProductOrderNo, TempOffLineInfo2.OrderQty));
}
}
}
catch (Exception ex)
{
log.Error(ex.Message.ToString());
}
}
/// <summary>
@ -300,7 +304,25 @@ namespace Aucma.Core.ProductOffLine.Business
{
try
{
// 1.质检
List<ReportQualityInsPection> qualityList = _reportQualityInspectionServices.JudgeIsQualified(BarCode);
if(qualityList != null)
{
TempOffLineInfo.QualityResult = "失败";
TempOffLineInfo.ProductSNCode = BarCode.Trim(); //产品SN条码*1
TempOffLineInfo.ProductScanTime = System.DateTime.Now; // 扫码时间*2
TempOffLineInfo.MsgInfo = "条码质检失败:";
foreach(ReportQualityInsPection item in qualityList)
{
TempOffLineInfo.MsgInfo += item.QualityDefectName;
}
TempOffLineInfo.MsgAlarmFlag = true;
//界面刷新
TempOffLineInfo.ProductRefreshFlag = true;
return false;
}
TempOffLineInfo.QualityResult = "成功";
TempOffLineInfo.ProductSNCode = BarCode.Trim(); //产品SN条码*1

Loading…
Cancel
Save