liulb@mesnac.com 11 months ago
commit 88718f3b34

@ -2721,6 +2721,36 @@
匹配时间 匹配时间
</summary> </summary>
</member> </member>
<member name="T:Admin.Core.Model.ExceptionRecord">
<summary>
异常记录表,暂时只有成品下线使用
</summary>
</member>
<member name="P:Admin.Core.Model.ExceptionRecord.ObjId">
<summary>
主键
</summary>
</member>
<member name="P:Admin.Core.Model.ExceptionRecord.ProductSnCode">
<summary>
产品条码
</summary>
</member>
<member name="P:Admin.Core.Model.ExceptionRecord.ExceptionMsg">
<summary>
异常信息
</summary>
</member>
<member name="P:Admin.Core.Model.ExceptionRecord.ProductScanTime">
<summary>
扫描时间
</summary>
</member>
<member name="P:Admin.Core.Model.ExceptionRecord.ProductLineCode">
<summary>
产线编号
</summary>
</member>
<member name="T:Admin.Core.Model.ExecutePlanInfo"> <member name="T:Admin.Core.Model.ExecutePlanInfo">
<summary> <summary>
计划执行表 计划执行表

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Admin.Core.Common")] [assembly: System.Reflection.AssemblyCompanyAttribute("Admin.Core.Common")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bea6862206de984208a5625df9b5cce4bce9db21")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Admin.Core.Common")] [assembly: System.Reflection.AssemblyProductAttribute("Admin.Core.Common")]
[assembly: System.Reflection.AssemblyTitleAttribute("Admin.Core.Common")] [assembly: System.Reflection.AssemblyTitleAttribute("Admin.Core.Common")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

@ -1 +1 @@
c442a599222e602f7178b129382ec63fa23a6ea93c436ae2c4a4f7b01d074c3f 3c08b2a6f95957043123cba0d01dcd1675663fc7

@ -8,6 +8,4 @@ build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules = build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Admin.Core.Common build_property.RootNamespace = Admin.Core.Common
build_property.ProjectDir = D:\Project\gitea\AUCMA\SCADA\Admin.Core.Common\ build_property.ProjectDir = E:\c#\AUCMA\new\Admin.Core.Common\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

@ -0,0 +1,15 @@
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>
/// IDoorFoamRecordRepository
/// </summary>
public interface IExceptionRecordRepository : IBaseRepository<ExceptionRecord>
{
}
}

@ -0,0 +1,17 @@
using Admin.Core.IService;
using Admin.Core.Model;
using Admin.Core.Model.ViewModels;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Admin.Core.IService
{
/// <summary>
/// 条码绑定
/// </summary>
public interface IExceptionRecordServices : IBaseServices<ExceptionRecord>
{
}
}

@ -15,7 +15,7 @@ namespace Admin.Core.IService
/// 判断是否有不合格质检项 /// 判断是否有不合格质检项
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
List<ReportQualityInsPection> JudgeIsQualified(string barCode); ReportQualityInsPection JudgeIsQualified(string BoxCode);
} }
} }

@ -99,7 +99,7 @@ namespace Admin.Core.Model
/// 增量日期 /// 增量日期
/// </summary> /// </summary>
[SugarColumn(ColumnName = "INCREMENT_DATE")] [SugarColumn(ColumnName = "INCREMENT_DATE")]
public string IncrementDate { get; set; } public DateTime IncrementDate { get; set; }
/// <summary> /// <summary>
/// 入库方向-A/B /// 入库方向-A/B
/// </summary> /// </summary>

@ -0,0 +1,48 @@
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("RECORD_EXCEPTION", "AUCMA_SCADA")]
public class ExceptionRecord
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(ColumnName = "OBJ_ID", IsIdentity = true, IsPrimaryKey = true, OracleSequenceName = "SEQ_RECORD_EXCEPTION")]
public int ObjId { get; set; }
/// <summary>
/// 产品条码
/// </summary>
[SugarColumn(ColumnName = "PRODUCT_SNCODE")]
public string ProductSnCode { get; set; }
/// <summary>
/// 异常信息
/// </summary>
[SugarColumn(ColumnName = "EXCEPTION_MSG")]
public string ExceptionMsg { get; set; }
/// <summary>
/// 扫描时间
/// </summary>
[SugarColumn(ColumnName = "PRODUCT_SCANTIME")]
public DateTime ProductScanTime { get; set; }
/// <summary>
/// 产线编号
/// </summary>
[SugarColumn(ColumnName = "PRODUCT_LINE_CODE")]
public string ProductLineCode { get; set; }
}
}

@ -0,0 +1,22 @@
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
{
public class ExceptionRecordRepository : BaseRepository<ExceptionRecord>, IExceptionRecordRepository
{
public ExceptionRecordRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
}
}

@ -0,0 +1,35 @@
using Admin.Core.IRepository;
using Admin.Core.IService;
using Admin.Core.Model;
using Admin.Core.Model.Model_New;
using Admin.Core.Model.ViewModels;
using Consul;
using log4net;
using Microsoft.IdentityModel.Logging;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Admin.Core.Service
{
public class ExceptionRecordServices : BaseServices<ExceptionRecord>, IExceptionRecordServices
{
#region 对象引用
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(ExceptionRecordServices));
#endregion
private readonly IBaseRepository<ExceptionRecord> _dal;
private IExceptionRecordRepository _exceptionRecordRepository;
public ExceptionRecordServices(IBaseRepository<ExceptionRecord> dal, IExceptionRecordRepository exceptionRecordRepository)
{
this._dal = dal;
base.BaseDal = dal;
_exceptionRecordRepository = exceptionRecordRepository;
}
}
}

@ -15,11 +15,11 @@ namespace Admin.Core.Service
public class ReportQualityInspectionServices : BaseServices<ReportQualityInsPection>, IReportQualityInspectionServices public class ReportQualityInspectionServices : BaseServices<ReportQualityInsPection>, IReportQualityInspectionServices
{ {
private readonly IBaseRepository<ReportQualityInsPection> _dal; private readonly IBaseRepository<ReportQualityInsPection> _dal;
private readonly IReportQualityInspectionRepository _baseSpaceInfoRepository; private readonly IReportQualityInspectionRepository _qualityInspectionRepository;
private readonly ICodeBindingRecordRepository _codeBindingRecordRepository; private readonly ICodeBindingRecordRepository _codeBindingRecordRepository;
public ReportQualityInspectionServices(IBaseRepository<ReportQualityInsPection> dal, IReportQualityInspectionRepository reportQualityInspectionRepository, ICodeBindingRecordRepository codeBindingRepository) public ReportQualityInspectionServices(IBaseRepository<ReportQualityInsPection> dal, IReportQualityInspectionRepository reportQualityInspectionRepository, ICodeBindingRecordRepository codeBindingRepository)
{ {
_baseSpaceInfoRepository = reportQualityInspectionRepository; _qualityInspectionRepository = reportQualityInspectionRepository;
_codeBindingRecordRepository = codeBindingRepository; _codeBindingRecordRepository = codeBindingRepository;
this._dal = dal; this._dal = dal;
base.BaseDal = dal; base.BaseDal = dal;
@ -27,21 +27,15 @@ namespace Admin.Core.Service
/// <summary> /// <summary>
/// 判断是否有不合格质检项,传入的是SN /// 判断是否有不合格质检项,传入的是箱体
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public List<ReportQualityInsPection> JudgeIsQualified(string SnCode) public ReportQualityInsPection JudgeIsQualified(string BoxCode)
{ {
try try
{ {
List<CodeBindingRecord> list = _codeBindingRecordRepository.Query(s => s.ProductCode == SnCode); ReportQualityInsPection record = _qualityInspectionRepository.Db.Ado.SqlQuery<ReportQualityInsPection>($"select * from REPORT_QUALITY_INSPECTION where BAR_CODE = '{BoxCode}' AND STATION_CODE = 2010 AND TREATMENT_MEASURE = 3").FirstOrDefault();
if(list!=null && list.Count > 0) return record;
{
string boxCode = list.FirstOrDefault().BoxCode;
var list1 = _baseSpaceInfoRepository.Query(x => x.BarCode.Equals(boxCode) && x.IsFlag != 1);
return list1;
}
} }
catch (System.Exception ex) catch (System.Exception ex)
{ {

@ -83,6 +83,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aucma.Core.SheetMetal", "Au
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aucma.Core.DataCollector", "Aucma.Core.DataCollector\Aucma.Core.DataCollector.csproj", "{DF628848-79A6-4234-A0F6-F961DFC16A0E}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aucma.Core.DataCollector", "Aucma.Core.DataCollector\Aucma.Core.DataCollector.csproj", "{DF628848-79A6-4234-A0F6-F961DFC16A0E}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aucma.Core.ProductOffLine", "Aucma.Core.ProductOffLine\Aucma.Core.ProductOffLine.csproj", "{1582FB18-5185-41A0-B185-914501B3FBFA}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -213,6 +215,10 @@ Global
{DF628848-79A6-4234-A0F6-F961DFC16A0E}.Debug|Any CPU.Build.0 = Debug|Any CPU {DF628848-79A6-4234-A0F6-F961DFC16A0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DF628848-79A6-4234-A0F6-F961DFC16A0E}.Release|Any CPU.ActiveCfg = Release|Any CPU {DF628848-79A6-4234-A0F6-F961DFC16A0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DF628848-79A6-4234-A0F6-F961DFC16A0E}.Release|Any CPU.Build.0 = Release|Any CPU {DF628848-79A6-4234-A0F6-F961DFC16A0E}.Release|Any CPU.Build.0 = Release|Any CPU
{1582FB18-5185-41A0-B185-914501B3FBFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1582FB18-5185-41A0-B185-914501B3FBFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1582FB18-5185-41A0-B185-914501B3FBFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1582FB18-5185-41A0-B185-914501B3FBFA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -252,6 +258,7 @@ Global
{B6955077-EEE5-429B-8A79-EDE749A8B034} = {BD987F3A-4E6C-4C47-B28F-1671F875EAE3} {B6955077-EEE5-429B-8A79-EDE749A8B034} = {BD987F3A-4E6C-4C47-B28F-1671F875EAE3}
{D452CA9F-2CF9-4978-B0BE-7365F1F7A4EB} = {BD987F3A-4E6C-4C47-B28F-1671F875EAE3} {D452CA9F-2CF9-4978-B0BE-7365F1F7A4EB} = {BD987F3A-4E6C-4C47-B28F-1671F875EAE3}
{DF628848-79A6-4234-A0F6-F961DFC16A0E} = {F8FB57F6-5465-4E60-B052-D3A63C3C56AE} {DF628848-79A6-4234-A0F6-F961DFC16A0E} = {F8FB57F6-5465-4E60-B052-D3A63C3C56AE}
{1582FB18-5185-41A0-B185-914501B3FBFA} = {BD987F3A-4E6C-4C47-B28F-1671F875EAE3}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8047AB56-042B-4AE4-B06A-34137067A86A} SolutionGuid = {8047AB56-042B-4AE4-B06A-34137067A86A}

@ -146,40 +146,41 @@ namespace Aucma.Core.BoxFoam.Business
private void UpdateShiftInfo(int shiftType) private void UpdateShiftInfo(int shiftType)
{ {
log.Warn($"{(shiftType == 1 ? "" : "")}班组切换,开始处理切换逻辑"); log.Warn($"{(shiftType == 1 ? "" : "")}班组切换,开始处理切换逻辑");
Console.WriteLine($"{(shiftType == 1 ? "" : "")}班组切换,开始处理切换逻辑");
try try
{ {
#region 240325 添加清空夹具产量功能 #region 240325 liulb 添加清空夹具产量功能 Delete By wenjy 2024-03-30 删除清空产量逻辑
//下发PLC清空产量信号 //下发PLC清空产量信号
#region 清空PLC产量新线暂时未清除产量如需清除可将注释取消 //var obj1 = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("foamLine1Plc"));
var obj1 = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("foamLine1Plc")); //if (obj1 != null)
if (obj1 != null) //{
{ // if (obj1.plc.IsConnected)
if (obj1.plc.IsConnected) // {
{ // var flag = obj1.plc.WriteBool("M6.0", true);//换班 数据清空
var flag = obj1.plc.WriteBool("M6.0", true);//换班 数据清空 // Thread.Sleep(500);
log.Warn($"班组切换清空1~6区产量数据写入清空数据点位M6.0 为true,写入结果:{flag}"); // obj1.plc.WriteBool("M6.0", false);//数据清空后复位
Thread.Sleep(500); // Console.WriteLine($"【{DateTime.Now}】班组切换清空1~6区产量数据{(flag == true ? "成功" : "失败")}");
var reset= obj1.plc.WriteBool("M6.0", false);//数据清空后复位 // log.Warn($"班组切换清空1~6区产量数据{(flag == true ? "成功" : "失败")}");
log.Warn($"班组切换清空1~6区产量数据写入清空数据点位M6.0 为false,写入结果:{reset}"); // }
Console.WriteLine($"【{DateTime.Now}】班组切换清空1~6区产量数据{(flag == true ? "" : "")}"); //}
log.Warn($"班组切换清空1~6区产量数据{(flag == true ? "" : "")}"); //var obj2 = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("foamLine2Plc"));
} //if (obj2 != null)
} //{
var obj2 = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("foamLine2Plc")); // if (obj2.plc.IsConnected)
if (obj2 != null) // {
{ // bool flag = obj2.plc.WriteBool("M6.0", true);//换班 数据清空
if (obj2.plc.IsConnected) // Thread.Sleep(500);
{ // obj2.plc.WriteBool("M6.0", false);//数据清空后复位
bool flag = obj2.plc.WriteBool("M6.0", true);//换班 数据清空 // Console.WriteLine($"【{DateTime.Now}】班组切换清空7~12区产量数据{(flag == true ? "成功" : "失败")}");
log.Warn($"班组切换清空7~12区产量数据写入清空数据点位M6.0 为true,写入结果:{flag}"); // log.Warn($"班组切换清空7~12区产量数据{(flag == true ? "成功" : "失败")}");
Thread.Sleep(500); // }
var reset = obj2.plc.WriteBool("M6.0", false);//数据清空后复位 //}
log.Warn($"班组切换清空7~12区产量数据写入复位数据点位M6.0 为false,写入结果:{reset}");
Console.WriteLine($"【{DateTime.Now}】班组切换清空7~12区产量数据{(flag == true ? "" : "")}");
log.Warn($"班组切换清空7~12区产量数据{(flag == true ? "" : "")}");
}
}
#endregion #endregion
#region Add By wenjy 2024-03-30 10:56:00 清空PLC产量,写true保持500毫秒后写false
ClearPlcOutPut(true);
Thread.Sleep(3000);
ClearPlcOutPut(false);
#endregion #endregion
//小时统计报表数据存至记录表,清空小时统计报表 //小时统计报表数据存至记录表,清空小时统计报表
@ -278,5 +279,33 @@ namespace Aucma.Core.BoxFoam.Business
log.Warn($"{(shiftType == 1 ? "" : "")}班组切换,切换逻辑处理异常:{ex.Message}"); log.Warn($"{(shiftType == 1 ? "" : "")}班组切换,切换逻辑处理异常:{ex.Message}");
} }
} }
/// <summary>
/// 清空PLC产量数据
/// </summary>
/// <param name="value"></param>
private void ClearPlcOutPut(bool value)
{
var obj1 = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("foamLine1Plc"));
if (obj1 != null)
{
if (obj1.plc.IsConnected)
{
var flag = obj1.plc.WriteBool("M6.0", value);//换班 数据清空
log.Warn($"班组切换清空A区产量数据写{value}{(flag == true ? "" : "")}");
Console.WriteLine($"班组切换清空A区产量数据写{value}{(flag == true ? "" : "")}");
}
}
var obj2 = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("foamLine2Plc"));
if (obj2 != null)
{
if (obj2.plc.IsConnected)
{
bool flag = obj2.plc.WriteBool("M6.0", value);//换班 数据清空
log.Warn($"班组切换清空B区产量数据写{value}{(flag == true ? "" : "")}");
Console.WriteLine($"班组切换清空B区产量数据写{value}{(flag == true ? "" : "")}");
}
}
}
} }
} }

@ -48,7 +48,7 @@ namespace Aucma.Core.BoxFoam.ViewModels
{ {
await init(); await init();
await RefreshTeamTime();//班组时间 await RefreshTeamTime();//班组时间
await ClearProduct(); //await ClearProduct();
}); });
TeamSwitchBusiness teamSwitchBusiness = new TeamSwitchBusiness(); TeamSwitchBusiness teamSwitchBusiness = new TeamSwitchBusiness();

@ -116,6 +116,7 @@ namespace Aucma.Core.CodeBinding
// Socket连接扫码器 // Socket连接扫码器
app.UseTouchSocketMildd(socket); app.UseTouchSocketMildd(socket);
// 集存库泡后库用电采集,报警采集
app.UseDataCollectorExtensions(); app.UseDataCollectorExtensions();
} }

@ -25,7 +25,7 @@ namespace Aucma.Core.DataCollector
public readonly IRecordDeviceElectricityServices _deviceElectricityServices; public readonly IRecordDeviceElectricityServices _deviceElectricityServices;
public int AlarmReadTimer = (1000 * 5); public int AlarmReadTimer = (1000 * 5);
public int EleReadTimer = (1000 * 5); public int EleReadTimer = (1000 * 60 * 5);
public DataCollectorFactory(IBaseDeviceParamServices deviceParamServices, IRecordDeviceAlarmInfoServices deviceAlarmInfoServices, IRecordDeviceElectricityServices deviceElectricityServices) public DataCollectorFactory(IBaseDeviceParamServices deviceParamServices, IRecordDeviceAlarmInfoServices deviceAlarmInfoServices, IRecordDeviceElectricityServices deviceElectricityServices)
{ {

@ -37,8 +37,11 @@ namespace Aucma.Core.Palletiz.Business
private AppConfig appConfig = new AppConfig(); private AppConfig appConfig = new AppConfig();
public string storeCode = Appsettings.app("StoreInfo", "PalletizStoreCodeA"); public string storeCode = Appsettings.app("StoreInfo", "PalletizStoreCodeA");
// 过点数据表物料完成记录MaterialCompletion
private readonly IMaterialCompletionServices? _iMaterialCompletionServices = App.ServiceProvider.GetService<IMaterialCompletionServices>();
private readonly IPrintBarCodeServices? _printBarCodeServices = App.ServiceProvider.GetService<IPrintBarCodeServices>();
private readonly ICodeBindingRecordServices? _codeBindingServices = App.ServiceProvider.GetService<ICodeBindingRecordServices>();
private readonly IRecordInStoreServices? _recordInstoreServices = App.ServiceProvider.GetService<IRecordInStoreServices>(); private readonly IRecordInStoreServices? _recordInstoreServices = App.ServiceProvider.GetService<IRecordInStoreServices>();
#region 委托事件 #region 委托事件
@ -54,7 +57,14 @@ namespace Aucma.Core.Palletiz.Business
/// </summary> /// </summary>
public delegate void RefreshMsg(string msg); public delegate void RefreshMsg(string msg);
public static event RefreshMsg? RefreshMsgEvent; public static event RefreshMsg? RefreshMsgEvent;
/// <summary>
///入库时DataGrid添加一条DataGrid记录
/// </summary>
public delegate void AddData(RecordInStore record);
public static event AddData? AddDataEvent;
#endregion #endregion
@ -177,6 +187,8 @@ namespace Aucma.Core.Palletiz.Business
} }
_ = _recordInstoreServices.AddAsync(recordInstore).Result; _ = _recordInstoreServices.AddAsync(recordInstore).Result;
//刷新页面
AddDataEvent?.Invoke(recordInstore);
#endregion #endregion
if (!result) if (!result)
@ -208,10 +220,39 @@ namespace Aucma.Core.Palletiz.Business
RefreshMsgEvent?.Invoke(msg); RefreshMsgEvent?.Invoke(msg);
} }
}
/// <summary>
/// 添加过点数据,暂不添加
/// </summary>
/// <returns></returns>
public async Task AddCompleteData(string ProductSnCode)
{
CodeBindingRecord bindingRecord1 = _codeBindingServices.FirstAsync(x => x.ProductCode == ProductSnCode).Result;
#region 更新过点数据
if (bindingRecord1 != null && bindingRecord1.BoxCode != "")
{
PrintBarCode print = _printBarCodeServices.FirstAsync(x => x.MaterialBarcode == bindingRecord1.BoxCode).Result;
if (print != null)
{
MaterialCompletion completion = new MaterialCompletion();
completion.OrderCode = print.OrderCode;
completion.MaterialBarcode = bindingRecord1.BoxCode;
completion.MaterialCode = print.MaterialCode;
completion.MaterialName = print.MaterialName;
// completion.StationName = "1009";
completion.CompleteDate = DateTime.Now;
completion.ProductLineCode = "CX_02";
completion.isDownLine = 1;
completion.ProductionCode = ProductSnCode;
_ = _iMaterialCompletionServices.AddAsync(completion).Result;
}
}
#endregion
} }
/// <summary> /// <summary>
/// 通过物料型号获取货道信息 /// 通过物料型号获取货道信息
/// </summary> /// </summary>
@ -267,7 +308,7 @@ namespace Aucma.Core.Palletiz.Business
if (plcCon == null) if (plcCon == null)
{ {
Task.Delay(1000 * 5).Wait(); Task.Delay(1000 * 3).Wait();
plcCon = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("InStoreAPlc")); plcCon = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("InStoreAPlc"));
if(plcCon == null) if(plcCon == null)
@ -283,8 +324,8 @@ namespace Aucma.Core.Palletiz.Business
{ {
item.SpaceCode = ExtractNumber(item.SpaceName); item.SpaceCode = ExtractNumber(item.SpaceName);
var plcAddress = _appConfig.plcAddr.Where(x => x.spaceCode.ToString() == item.SpaceCode && x.spaceArea == item.SpaceArea).First(); var plcAddress = _appConfig.plcAddr.Where(x => x.spaceCode.ToString() == item.SpaceCode && x.spaceArea == item.SpaceArea).First();
int isFlag = _plc.ReadInt16(plcAddress.address); bool isFlag = _plc.ReadBool(plcAddress.address);
if (isFlag == 1) if (isFlag)
{ {
item.SpaceStatus = 3; item.SpaceStatus = 3;
} }

@ -52,6 +52,7 @@ namespace Aucma.Core.Palletiz.ViewModels
foreach (ProductAllModel info in list) foreach (ProductAllModel info in list)
{ {
MaterialDataGrid.Add(info); MaterialDataGrid.Add(info);
} }
}); });
} }
@ -97,14 +98,18 @@ namespace Aucma.Core.Palletiz.ViewModels
[RelayCommand] [RelayCommand]
public void Save(Window window) public void Save(Window window)
{ {
Console.WriteLine(Area); if (Area == null)
{
MessageBox.Show("请先选择区域");
return;
}
if (string.IsNullOrEmpty(ProductCode)) if (string.IsNullOrEmpty(ProductCode))
{ {
MessageBox.Show("请先选择产品型号"); MessageBox.Show("请先选择产品型号");
return; return;
} }
HandSendEvent?.Invoke("A", productCode); HandSendEvent?.Invoke(Area.Content.ToString(), productCode);
MessageBox.Show("手动入库成功"); MessageBox.Show("手动入库成功");
window.Close(); window.Close();
// 入库 // 入库

@ -8,6 +8,8 @@ using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using Aucma.Core.Palletiz.Views; using Aucma.Core.Palletiz.Views;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using System.Threading.Tasks;
using static Aucma.Core.Palletiz.ViewModels.StatisticsPageViewModel;
/* /*
* *
@ -24,6 +26,7 @@ namespace Aucma.Core.Palletiz.ViewModels
new InStoreBusiness().Init(); new InStoreBusiness().Init();
SelectTypeViewModel.RefreshPageEvent += Init; SelectTypeViewModel.RefreshPageEvent += Init;
StatisticsPageViewModel.CountInstoreEvent += CountInstore;
this.inStoreBusiness = App.ServiceProvider.GetService<InStoreBusiness>(); this.inStoreBusiness = App.ServiceProvider.GetService<InStoreBusiness>();
InStoreBusiness.RefreshMsgEvent += RefreshMsg; InStoreBusiness.RefreshMsgEvent += RefreshMsg;
InStoreBusiness.RefreshProductInfoEvent += RefreshProductInfo; InStoreBusiness.RefreshProductInfoEvent += RefreshProductInfo;
@ -31,20 +34,26 @@ namespace Aucma.Core.Palletiz.ViewModels
{ {
Console.WriteLine($"{obj};设置"); Console.WriteLine($"{obj};设置");
BaseSpaceInfo space = inStoreBusiness.GetSpaceinfosById(obj); BaseSpaceInfo space = inStoreBusiness.GetSpaceinfosById(obj);
if(space != null ) if (space != null)
{ {
SelectType direct = new SelectType(space); SelectType direct = new SelectType(space);
direct.ShowDialog(); direct.ShowDialog();
} }
}); });
this.Init(); this.Init();
InStoreAmount = inStoreAmount + "19";
InStoreTaskContent = new StatisticsPageView(); InStoreTaskContent = new StatisticsPageView();
} }
public void CountInstore(int count)
{
InStoreAmount = "入库数量:";
InStoreAmount = inStoreAmount + count;
}
#region 参数定义 #region 参数定义
public string productSNCode = string.Empty; public string productSNCode = string.Empty;
@ -55,12 +64,12 @@ namespace Aucma.Core.Palletiz.ViewModels
} }
public string productModel = string.Empty; public string productModel = string.Empty;
public string ProductModel public string ProductModel
{ {
get { return this.productModel; } get { return this.productModel; }
set => SetProperty(ref productModel, value); set => SetProperty(ref productModel, value);
} }
public string orderCode = string.Empty; public string orderCode = string.Empty;
@ -69,7 +78,7 @@ namespace Aucma.Core.Palletiz.ViewModels
get { return this.orderCode; } get { return this.orderCode; }
set => SetProperty(ref orderCode, value); set => SetProperty(ref orderCode, value);
} }
public string productScanTime = string.Empty; public string productScanTime = string.Empty;
@ -77,7 +86,7 @@ namespace Aucma.Core.Palletiz.ViewModels
{ {
get { return this.productScanTime; } get { return this.productScanTime; }
set => SetProperty(ref productScanTime, value); set => SetProperty(ref productScanTime, value);
} }
public string msg = string.Empty; public string msg = string.Empty;
@ -85,7 +94,7 @@ namespace Aucma.Core.Palletiz.ViewModels
{ {
get { return this.msg; } get { return this.msg; }
set => SetProperty(ref msg, value); set => SetProperty(ref msg, value);
} }
public string inStoreAmount = "入库数量:"; public string inStoreAmount = "入库数量:";
public string InStoreAmount public string InStoreAmount
@ -93,7 +102,7 @@ namespace Aucma.Core.Palletiz.ViewModels
get { return this.inStoreAmount; } get { return this.inStoreAmount; }
set => SetProperty(ref inStoreAmount, value); set => SetProperty(ref inStoreAmount, value);
} }
public System.Windows.Controls.UserControl _content; public System.Windows.Controls.UserControl _content;
@ -104,7 +113,7 @@ namespace Aucma.Core.Palletiz.ViewModels
set => SetProperty(ref _content, value); set => SetProperty(ref _content, value);
} }
/// <summary> /// <summary>
@ -116,7 +125,7 @@ namespace Aucma.Core.Palletiz.ViewModels
{ {
get { return _areaA_SpaceInfo; } get { return _areaA_SpaceInfo; }
set => SetProperty(ref _areaA_SpaceInfo, value); set => SetProperty(ref _areaA_SpaceInfo, value);
} }
/// <summary> /// <summary>
@ -128,7 +137,7 @@ namespace Aucma.Core.Palletiz.ViewModels
{ {
get { return _areaB_SpaceInfo; } get { return _areaB_SpaceInfo; }
set => SetProperty(ref _areaB_SpaceInfo, value); set => SetProperty(ref _areaB_SpaceInfo, value);
} }
#endregion #endregion
@ -160,46 +169,55 @@ namespace Aucma.Core.Palletiz.ViewModels
OrderCode = orderCode; OrderCode = orderCode;
ProductScanTime = DateTime.Now.ToString(); ProductScanTime = DateTime.Now.ToString();
} }
private void Init() private async Task Init()
{ {
await Task.Run(() =>
var info = inStoreBusiness.GetBaseSpaceinfos("A");
info = info.OrderByDescending(x => x.ObjId).ToList();
if (info != null)
{ {
App.Current.Dispatcher.BeginInvoke((Action)(() => var info = inStoreBusiness.GetBaseSpaceinfos("A");
info = info.OrderByDescending(x => x.ObjId).ToList();
if (info != null)
{ {
if (spaceItems.Count > 0) App.Current.Dispatcher.BeginInvoke((Action)(() =>
{ {
spaceItems.Clear(); if (spaceItems.Count > 0)
} {
foreach (var item in info) spaceItems.Clear();
}
foreach (var item in info)
{
spaceItems.Add(item);
}
AreaA_SpaceInfo = spaceItems;
}));
}
var info2 = inStoreBusiness.GetBaseSpaceinfos("A");
info2 = info2.OrderBy(x => x.ObjId).ToList();
if (info2 != null)
{
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{ {
spaceItems.Add(item); if (spaceItemsB.Count > 0)
} {
AreaA_SpaceInfo = spaceItems; spaceItemsB.Clear();
})); }
} foreach (var item in info2)
{
spaceItemsB.Add(item);
//var info2 = inStoreBusiness.GetBaseSpaceinfos("A"); }
//info2 = info2.OrderBy(x => x.ObjId).ToList(); AreaB_SpaceInfo = spaceItemsB;
//if (info2 != null) }));
//{ }
// App.Current.Dispatcher.BeginInvoke((Action)(() =>
// { });
// if (spaceItemsB.Count > 0)
// {
// spaceItemsB.Clear();
// }
// foreach (var item in info2)
// {
// spaceItemsB.Add(item);
// }
// AreaB_SpaceInfo = spaceItemsB;
// }));
//}
} }
} }
} }

@ -20,7 +20,7 @@ namespace Aucma.Core.Palletiz.ViewModels
public PalletizPageViewModel() { public PalletizPageViewModel() {
_baseSpaceInfoServices = App.ServiceProvider.GetService<IBaseSpaceInfoServices>(); _baseSpaceInfoServices = App.ServiceProvider.GetService<IBaseSpaceInfoServices>();
LoadDataGrid(); LoadDataGrid();
SelectTypeViewModel.RefreshPageEvent += LoadDataGrid; // SelectTypeViewModel.RefreshPageEvent += LoadDataGrid;
} }
public void LoadDataGrid() public void LoadDataGrid()

@ -33,7 +33,7 @@ namespace Aucma.Core.Palletiz.ViewModels
/// 刷新货道页面 /// 刷新货道页面
/// </summary> /// </summary>
/// <param name="message"></param> /// <param name="message"></param>
public delegate void RefreshPage(); public delegate Task RefreshPage();
public static event RefreshPage RefreshPageEvent; public static event RefreshPage RefreshPageEvent;
private static readonly log4net.ILog logHelper = LogManager.GetLogger(typeof(BaseSpaceInfoServices)); private static readonly log4net.ILog logHelper = LogManager.GetLogger(typeof(BaseSpaceInfoServices));

@ -1,6 +1,7 @@
using Admin.Core.Common; using Admin.Core.Common;
using Admin.Core.IService; using Admin.Core.IService;
using Admin.Core.Model; using Admin.Core.Model;
using Aucma.Core.Palletiz.Business;
using Aucma.Core.Palletiz.Models; using Aucma.Core.Palletiz.Models;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Input;
@ -13,15 +14,28 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Documents;
namespace Aucma.Core.Palletiz.ViewModels namespace Aucma.Core.Palletiz.ViewModels
{ {
public partial class StatisticsPageViewModel : ObservableObject public partial class StatisticsPageViewModel : ObservableObject
{ {
// private static readonly Lazy<StatisticsPageViewModel> lazy = new Lazy<StatisticsPageViewModel>(() => new StatisticsPageViewModel());
// public static StatisticsPageViewModel Instance => lazy.Value;
public StatisticsPageViewModel() { /// <summary>
/// 入库数量统计
/// </summary>
public delegate void CountInstore(int count);
public static event CountInstore? CountInstoreEvent;
// private static readonly Lazy<StatisticsPageViewModel> lazy = new Lazy<StatisticsPageViewModel>(() => new StatisticsPageViewModel());
// public static StatisticsPageViewModel Instance => lazy.Value;
public StatisticsPageViewModel()
{
MainWindowViewModel.RefreshInfoEvent += LoadData; MainWindowViewModel.RefreshInfoEvent += LoadData;
InStoreBusiness.AddDataEvent += AddData;
LoadData(); LoadData();
} }
private readonly IRecordInStoreServices? _recordInstoreServices = App.ServiceProvider.GetService<IRecordInStoreServices>(); private readonly IRecordInStoreServices? _recordInstoreServices = App.ServiceProvider.GetService<IRecordInStoreServices>();
@ -30,36 +44,52 @@ namespace Aucma.Core.Palletiz.ViewModels
public string storeCodeB = Appsettings.app("StoreInfo", "PalletizStoreCodeB"); public string storeCodeB = Appsettings.app("StoreInfo", "PalletizStoreCodeB");
/// <summary>
/// 入库时DataGrid添加一条记录
/// </summary>
/// <returns></returns>
public void AddData(RecordInStore record)
{
App.Current.Dispatcher.Invoke(() =>
{
MaterialDataGrid.Add(record);
CountInstoreEvent?.Invoke(MaterialDataGrid.Count);
});
}
#region 加载DataGrid数据 #region 加载DataGrid数据
private async Task LoadData() private async Task LoadData()
{ {
await Task.Run(() =>
{
try
{
await Task.Run(() => List<RecordInStore> list = _recordInstoreServices.QueryAsync(x => (x.StoreCode == storeCodeA || x.StoreCode == storeCodeB) && x.InStoreTime >= DateTime.Today).Result;
{ if (list != null && list.Count > 0)
try {
{ App.Current.Dispatcher.Invoke(() =>
{
MaterialDataGrid.Clear();
CountInstoreEvent?.Invoke(list.Count);
list.OrderByDescending(x => x.InStoreTime);
foreach (RecordInStore record in list)
{
List<RecordInStore> list = _recordInstoreServices.QueryAsync(x => (x.StoreCode == storeCodeA || x.StoreCode == storeCodeB) && x.InStoreTime >= DateTime.Today).Result; MaterialDataGrid.Add(record);
if (list != null && list.Count > 0)
{ }
list.OrderByDescending(x => x.InStoreTime); });
foreach (RecordInStore record in list) }
{ }
App.Current.Dispatcher.Invoke(() => catch (Exception ex)
{ {
MaterialDataGrid.Add(record); Console.WriteLine("" + ex.Message.ToString());
});
} }
} });
}
catch (Exception ex)
{
Console.WriteLine("" + ex.Message.ToString());
}
});
//MaterialDataGrid.Add(new MaterialComplateInfo() { No = 1, ProductPlanCode = "8659452123",MaterialCode = "8659452123", MaterialName = "SC-AUCMA-农夫山泉SC", PlanAmount = 50, CompleteAmount = 10 }); //MaterialDataGrid.Add(new MaterialComplateInfo() { No = 1, ProductPlanCode = "8659452123",MaterialCode = "8659452123", MaterialName = "SC-AUCMA-农夫山泉SC", PlanAmount = 50, CompleteAmount = 10 });
} }
@ -93,14 +123,14 @@ namespace Aucma.Core.Palletiz.ViewModels
List<RecordInStore> list = _recordInstoreServices.QueryAsync(x => (x.StoreCode == storeCodeA || x.StoreCode == storeCodeB) && x.BarCodeCode.Contains(result)).Result; List<RecordInStore> list = _recordInstoreServices.QueryAsync(x => (x.StoreCode == storeCodeA || x.StoreCode == storeCodeB) && x.BarCodeCode.Contains(result)).Result;
if (list != null && list.Count > 0) if (list != null && list.Count > 0)
{ {
MaterialDataGrid.Clear(); App.Current.Dispatcher.Invoke(() =>
foreach (RecordInStore record in list)
{ {
App.Current.Dispatcher.Invoke(() => MaterialDataGrid.Clear();
foreach (RecordInStore record in list)
{ {
MaterialDataGrid.Add(record); MaterialDataGrid.Add(record);
}); }
} });
} }
}); });
} }

@ -113,7 +113,7 @@
<Border Grid.Row="1" BorderThickness="4" > <Border Grid.Row="1" BorderThickness="4" >
<DataGrid ItemsSource="{Binding MaterialDataGrid}" Height="{Binding Path=ActualHeight, ElementName=HeightPanel}" <DataGrid ItemsSource="{Binding MaterialDataGrid}" Height="{Binding Path=ActualHeight, ElementName=HeightPanel}"
HorizontalAlignment="Left" VerticalAlignment="Top" AlternationCount="2" RowHeaderWidth="0" HorizontalAlignment="Left" VerticalAlignment="Top" AlternationCount="2" RowHeaderWidth="0"
ColumnWidth="*" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" SelectionMode="Single" ColumnWidth="*" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" SelectionMode="Single"
SelectedItem="{Binding SelectedDataItem}" SelectionChanged="DataGrid_SelectionChanged" > SelectedItem="{Binding SelectedDataItem}" SelectionChanged="DataGrid_SelectionChanged" >
<DataGrid.Columns> <DataGrid.Columns>
<!--<DataGridTextColumn Binding="{Binding OrderCode}" Width="*" Header="订单编码" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>--> <!--<DataGridTextColumn Binding="{Binding OrderCode}" Width="*" Header="订单编码" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->

@ -108,12 +108,20 @@
<UniformGrid Grid.Row="1"> <UniformGrid Grid.Row="1">
<DataGrid ItemsSource="{Binding MaterialDataGrid}" <DataGrid ItemsSource="{Binding MaterialDataGrid}"
ColumnHeaderHeight="45" FontSize="18" ColumnHeaderHeight="45" FontSize="18"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" LoadingRow="DataGrid_LoadingRow"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden" GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True"
Foreground="White" > Foreground="White" >
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Binding="{Binding No}" Header="序号" Width="1*" Visibility="Collapsed"/> <DataGridTemplateColumn Width="*" Header="序号" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}}, Path=Header}" FontSize="18" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding BarCodeCode}" Header="成品条码" Width="3*" /> <DataGridTextColumn Binding="{Binding BarCodeCode}" Header="成品条码" Width="3*" />
<DataGridTextColumn Binding="{Binding MaterialName}" Header="成品型号" Width="3*" /> <DataGridTextColumn Binding="{Binding MaterialName}" Header="成品型号" Width="3*" />
<DataGridTextColumn Binding="{Binding StoreArea}" Header="区域" Width="1*" /> <DataGridTextColumn Binding="{Binding StoreArea}" Header="区域" Width="1*" />

@ -27,5 +27,9 @@ namespace Aucma.Core.Palletiz.Views
this.DataContext = new StatisticsPageViewModel(); this.DataContext = new StatisticsPageViewModel();
} }
private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = (e.Row.GetIndex() + 1).ToString();
}
} }
} }

@ -62,14 +62,14 @@ namespace Aucma.Core.ProductOffLine.Business
/// 扫码器2扫到条码的临时数据 /// 扫码器2扫到条码的临时数据
/// </summary> /// </summary>
public static TempInfo TempOffLineInfo2 = new TempInfo(); public static TempInfo TempOffLineInfo2 = new TempInfo();
// 河南工厂编码
private static string Werks = "1301";
#endregion #endregion
#region 接口引用 #region 接口引用
private AppConfig appConfig = AppConfig.Instance; private AppConfig appConfig = AppConfig.Instance;
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OffLineBusiness)); private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OffLineBusiness));
private readonly IExceptionRecordServices? exceptionRecordServices = App.ServiceProvider.GetService<IExceptionRecordServices>();
private readonly IBaseOrderInfoServices _baseOrderInfoServices = App.ServiceProvider.GetService<IBaseOrderInfoServices>(); private readonly IBaseOrderInfoServices _baseOrderInfoServices = App.ServiceProvider.GetService<IBaseOrderInfoServices>();
private readonly IPrintBarCodeServices? _printBarCodeServices = App.ServiceProvider.GetService<IPrintBarCodeServices>(); private readonly IPrintBarCodeServices? _printBarCodeServices = App.ServiceProvider.GetService<IPrintBarCodeServices>();
@ -115,7 +115,7 @@ namespace Aucma.Core.ProductOffLine.Business
GunBusiness.RefreshMaterialCodeStrEvent += MaterialBarScan; GunBusiness.RefreshMaterialCodeStrEvent += MaterialBarScan;
HandSendPlcWindow.SendPlcPassEvent += DownLoadPassFlag; HandSendPlcWindow.SendPlcPassEvent += DownLoadPassFlag;
// test(); // test();
} }
#region 变量定义 #region 变量定义
/// <summary> /// <summary>
@ -129,15 +129,7 @@ namespace Aucma.Core.ProductOffLine.Business
{ {
#region 成品条码与69码校验 #region 成品条码与69码校验
//BaseMaterialInfo materialInfo = _baseMaterialInfoServices.FirstAsync(x => x.ProductCode == "6933973114570").Result; MaterialBarScan("15147X0CD0099E3W03410","12344", "10.10.92.141");
//if (materialInfo == null)
//{
// Console.WriteLine();
//}
//if (!"BCD-212CFT".Contains(materialInfo.ProductName))
//{
// Console.WriteLine();
//}
#endregion #endregion
} }
@ -168,7 +160,7 @@ namespace Aucma.Core.ProductOffLine.Business
if (ScannerNo == 1) //内侧 if (ScannerNo == 1) //内侧
{ {
//1.扫描的SN条码去条码系统校验 //1.扫描的SN条码去条码系统校验
BackResult = HandleMaterialBarCode(code, code69, TempOffLineInfo1); //扫码器1 BackResult = HandleMaterialBarCode(code, code69, TempOffLineInfo1,out CodeBindingRecord bindingRecord1); //扫码器1
materialType = TempOffLineInfo1.ProductCode; materialType = TempOffLineInfo1.ProductCode;
if (!BackResult) if (!BackResult)
{ {
@ -178,7 +170,7 @@ namespace Aucma.Core.ProductOffLine.Business
} }
// TempOffLineInfo1.ProductRefreshFlag = true; // TempOffLineInfo1.ProductRefreshFlag = true;
// 2.更新mes数据库 // 2.更新mes数据库
bool MesResult = updateMesData(TempOffLineInfo1); bool MesResult = updateMesData(TempOffLineInfo1, bindingRecord1);
// 3.plc放行 // 3.plc放行
if (MesResult) if (MesResult)
@ -224,7 +216,7 @@ namespace Aucma.Core.ProductOffLine.Business
// 扫码器2 // 扫码器2
else if (ScannerNo == 2) // 外侧 else if (ScannerNo == 2) // 外侧
{ {
BackResult = HandleMaterialBarCode(code, code69, TempOffLineInfo2); //扫码器2 BackResult = HandleMaterialBarCode(code, code69, TempOffLineInfo2, out CodeBindingRecord bindingRecord1); //扫码器2
materialType = TempOffLineInfo2.ProductCode; materialType = TempOffLineInfo2.ProductCode;
if (!BackResult) if (!BackResult)
{ {
@ -233,7 +225,7 @@ namespace Aucma.Core.ProductOffLine.Business
} }
// TempOffLineInfo2.ProductRefreshFlag = true; // TempOffLineInfo2.ProductRefreshFlag = true;
// 2.更新mes数据库 // 2.更新mes数据库
bool MesResult = updateMesData(TempOffLineInfo2); bool MesResult = updateMesData(TempOffLineInfo2, bindingRecord1);
//BackResult = true; //BackResult = true;
// 3.plc放行 // 3.plc放行
@ -285,6 +277,30 @@ namespace Aucma.Core.ProductOffLine.Business
} }
} }
/// <summary>
/// 往mes数据库添加异常记录
/// </summary>
/// <param name="SNCode"></param>
/// <param name="Msg"></param>
public async void AddExceptionRecord(string SNCode,string Msg)
{
try
{
ExceptionRecord record = new ExceptionRecord();
record.ProductSnCode = SNCode;
record.ProductScanTime = DateTime.Now;
record.ProductLineCode = appConfig.ProductlineCode;
record.ExceptionMsg = Msg;
await exceptionRecordServices.AddAsync(record);
}
catch (Exception ex)
{
log.Info("添加异常记录方法AddExceptionRecord异常:" + ex.Message.ToString());
}
}
/// <summary> /// <summary>
/// 下发plc放行并等待反馈信号 /// 下发plc放行并等待反馈信号
/// </summary> /// </summary>
@ -307,30 +323,20 @@ namespace Aucma.Core.ProductOffLine.Business
/// </summary> /// </summary>
/// <param name="BarCode"></param> /// <param name="BarCode"></param>
/// <returns></returns> /// <returns></returns>
public bool updateMesData(TempInfo TempOffLineInfo) public bool updateMesData(TempInfo TempOffLineInfo,CodeBindingRecord bindingRecord1)
{ {
try try
{ {
OffLineInfo info11 = MapperTwo(TempOffLineInfo); OffLineInfo info11 = MapperTwo(TempOffLineInfo);
CodeBindingRecord bindingRecord1 = _codeBindingServices.FirstAsync(x => x.ProductCode == info11.ProductSNCode).Result;
if (bindingRecord1 == null)
{
log.Info(info11.ProductCode + "mes数据库未查询到条码绑定记录");
// 条码绑定上位机运行以后打开
//return false;
}
else
{
// log.Info("条码绑定表查到记录:"+JsonHelper.ObjectToJson(bindingRecord1)); // log.Info("条码绑定表查到记录:"+JsonHelper.ObjectToJson(bindingRecord1));
info11.BoxCode = bindingRecord1.BoxCode; info11.BoxCode = bindingRecord1.BoxCode;
}
// 产线 // 产线
info11.ProductLineCode = "CX_02"; info11.ProductLineCode = appConfig.ProductlineCode.ToString();
info11.SaveRetuenInfo = TempOffLineInfo.MsgInfo; info11.SaveRetuenInfo = TempOffLineInfo.MsgInfo;
info11.LoginTeam = appConfig.LoginTeam; info11.LoginTeam = appConfig.LoginTeam;
info11.PlcResult = 1; info11.PlcResult = 1;
@ -347,6 +353,7 @@ namespace Aucma.Core.ProductOffLine.Business
TempOffLineInfo.MsgAlarmFlag = true; TempOffLineInfo.MsgAlarmFlag = true;
//界面刷新 //界面刷新
RefreshScanMateriaCodeEvent(TempOffLineInfo); RefreshScanMateriaCodeEvent(TempOffLineInfo);
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.MsgInfo);
return false; return false;
} }
@ -361,6 +368,7 @@ namespace Aucma.Core.ProductOffLine.Business
log.Info("条码:" + TempOffLineInfo.ProductBarNo + " 订单号:" + TempOffLineInfo.ProductOrderNo + " 查询mes订单失败"); log.Info("条码:" + TempOffLineInfo.ProductBarNo + " 订单号:" + TempOffLineInfo.ProductOrderNo + " 查询mes订单失败");
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "查询mes订单失败"; TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "查询mes订单失败";
TempOffLineInfo.MsgAlarmFlag = true; TempOffLineInfo.MsgAlarmFlag = true;
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.ProductSNCode+TempOffLineInfo.MsgInfo);
//界面刷新 //界面刷新
RefreshScanMateriaCodeEvent(TempOffLineInfo); RefreshScanMateriaCodeEvent(TempOffLineInfo);
return false; return false;
@ -378,6 +386,7 @@ namespace Aucma.Core.ProductOffLine.Business
log.Info("条码:" + TempOffLineInfo.ProductBarNo + " 订单号:" + TempOffLineInfo.ProductOrderNo + " 更新mes订单完成数失败"); log.Info("条码:" + TempOffLineInfo.ProductBarNo + " 订单号:" + TempOffLineInfo.ProductOrderNo + " 更新mes订单完成数失败");
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "更新mes订单完成数失败"; TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "更新mes订单完成数失败";
TempOffLineInfo.MsgAlarmFlag = true; TempOffLineInfo.MsgAlarmFlag = true;
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.ProductSNCode+ "更新mes订单完成数失败");
//界面刷新 //界面刷新
RefreshScanMateriaCodeEvent(TempOffLineInfo); RefreshScanMateriaCodeEvent(TempOffLineInfo);
return false; return false;
@ -396,7 +405,7 @@ namespace Aucma.Core.ProductOffLine.Business
completion.MaterialName = print.MaterialName; completion.MaterialName = print.MaterialName;
completion.StationName = "1009"; completion.StationName = "1009";
completion.CompleteDate = DateTime.Now; completion.CompleteDate = DateTime.Now;
completion.ProductLineCode = "CX_02"; completion.ProductLineCode = appConfig.ProductlineCode;
completion.isDownLine = 1; completion.isDownLine = 1;
completion.ProductionCode = TempOffLineInfo.ProductSNCode; completion.ProductionCode = TempOffLineInfo.ProductSNCode;
_ = _iMaterialCompletionServices.AddAsync(completion).Result; _ = _iMaterialCompletionServices.AddAsync(completion).Result;
@ -426,29 +435,42 @@ namespace Aucma.Core.ProductOffLine.Business
/// <param name="code69"> 69码</param> /// <param name="code69"> 69码</param>
/// <param name="TempOffLineInfo"></param> /// <param name="TempOffLineInfo"></param>
/// <returns></returns> /// <returns></returns>
public bool HandleMaterialBarCode(string BarCode, string code69, TempInfo TempOffLineInfo) public bool HandleMaterialBarCode(string BarCode, string code69, TempInfo TempOffLineInfo,out CodeBindingRecord bindingRecord1)
{ {
try try
{ {
#region 1.质检--暂未启用
// List<ReportQualityInsPection> qualityList = _reportQualityInspectionServices.JudgeIsQualified(BarCode); bindingRecord1 = _codeBindingServices.FirstAsync(x => x.ProductCode == BarCode).Result;
// if (qualityList != null)
//{ if (bindingRecord1 == null)
// TempOffLineInfo.QualityResult = "失败"; {
// TempOffLineInfo.ProductSNCode = BarCode.Trim(); //产品SN条码*1 TempOffLineInfo.MsgInfo = BarCode + ":条码绑定工位未查询到条码绑定记录,请拆掉包装重新绑定";
// TempOffLineInfo.ProductScanTime = System.DateTime.Now; // 扫码时间*2 TempOffLineInfo.MsgAlarmFlag = true;
// TempOffLineInfo.MsgInfo = "条码质检失败:"; //界面刷新
// TempOffLineInfo.ProductRefreshFlag = true;
// foreach(ReportQualityInsPection item in qualityList) RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
// { log.Info(TempOffLineInfo.ProductSNCode + "条码绑定工位未查询到条码绑定记录,请拆掉包装重新绑定");
// TempOffLineInfo.MsgInfo += item.QualityDefectName; AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.MsgInfo);
// } return false;
// TempOffLineInfo.MsgAlarmFlag = true;
// //界面刷新 }
// // TempOffLineInfo.ProductRefreshFlag = true;
// RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); #region 1.质检-未查到终检合格记录即为质检不合格
// return false; ReportQualityInsPection qualityList = _reportQualityInspectionServices.JudgeIsQualified(bindingRecord1.BoxCode);
//} if (qualityList == null)
{
TempOffLineInfo.QualityResult = "失败";
TempOffLineInfo.ProductSNCode = BarCode.Trim(); //产品SN条码*1
TempOffLineInfo.ProductScanTime = System.DateTime.Now; // 扫码时间*2
TempOffLineInfo.MsgInfo = TempOffLineInfo.ProductSNCode+":条码终检失败或未终检,请回到终检工位重新检查!";
TempOffLineInfo.MsgAlarmFlag = true;
//界面刷新
// TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.MsgInfo);
return false;
}
#endregion #endregion
@ -508,7 +530,7 @@ namespace Aucma.Core.ProductOffLine.Business
{ {
TempOffLineInfo.MsgInfo = "69码校验失败:" + code69+"未维护69码信息!"; TempOffLineInfo.MsgInfo = "69码校验失败:" + code69+"未维护69码信息!";
TempOffLineInfo.MsgAlarmFlag = true; TempOffLineInfo.MsgAlarmFlag = true;
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.ProductSNCode+TempOffLineInfo.MsgInfo);
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
log.Info("69码校验失败:" + code69 + "未维护69码信息!"); log.Info("69码校验失败:" + code69 + "未维护69码信息!");
return false; // 因为没有录69码校验失败暂不处理允许下线等69码录全就禁止下线 return false; // 因为没有录69码校验失败暂不处理允许下线等69码录全就禁止下线
@ -522,6 +544,7 @@ namespace Aucma.Core.ProductOffLine.Business
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
log.Info("69码校验失败,69码:"+code69+";69码名称:" + materialInfo.ProductName + ";成品码名称:" + TempOffLineInfo.ProductName); log.Info("69码校验失败,69码:"+code69+";69码名称:" + materialInfo.ProductName + ";成品码名称:" + TempOffLineInfo.ProductName);
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.ProductSNCode+TempOffLineInfo.MsgInfo);
return false; return false;
} }
else else
@ -550,7 +573,7 @@ namespace Aucma.Core.ProductOffLine.Business
else else
{ {
log.Info(BarCode + "失败返回验证信息:" + FArrayList[1]); log.Info(BarCode + "失败返回验证信息:" + FArrayList[1]);
#region 实体赋值 #region 实体赋值
TempOffLineInfo.MsgAlarmFlag = true; TempOffLineInfo.MsgAlarmFlag = true;
TempOffLineInfo.MsgInfo = "条码系统获取信息失败. " + BarCode + " 返回值:" + FArrayList[0].ToString(); TempOffLineInfo.MsgInfo = "条码系统获取信息失败. " + BarCode + " 返回值:" + FArrayList[0].ToString();
@ -578,6 +601,8 @@ namespace Aucma.Core.ProductOffLine.Business
//界面刷新 //界面刷新
// TempOffLineInfo.ProductRefreshFlag = true; // TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.MsgInfo);
return false; return false;
} }
@ -590,6 +615,7 @@ namespace Aucma.Core.ProductOffLine.Business
// TempOffLineInfo.ProductRefreshFlag = true; // TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
log.Info(BarCode + "条码验证异常:" + ex.Message.ToString()); log.Info(BarCode + "条码验证异常:" + ex.Message.ToString());
bindingRecord1 = null;
return false; return false;
} }
} }
@ -624,6 +650,8 @@ namespace Aucma.Core.ProductOffLine.Business
//界面刷新 //界面刷新
// TempOffLineInfo.ProductRefreshFlag = true; // TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.MsgInfo);
return false; return false;
} }
@ -654,6 +682,8 @@ namespace Aucma.Core.ProductOffLine.Business
return CodeRepeatProcess(TempOffLineInfo); return CodeRepeatProcess(TempOffLineInfo);
} }
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.MsgInfo);
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
return false; return false;
} }
@ -663,6 +693,7 @@ namespace Aucma.Core.ProductOffLine.Business
{ {
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",条码系统保存接口异常"; TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",条码系统保存接口异常";
TempOffLineInfo.MsgAlarmFlag = true; TempOffLineInfo.MsgAlarmFlag = true;
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.MsgInfo);
//界面刷新 //界面刷新
// TempOffLineInfo.ProductRefreshFlag = true; // TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
@ -673,6 +704,7 @@ namespace Aucma.Core.ProductOffLine.Business
{ {
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",生产单号异常"; TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",生产单号异常";
TempOffLineInfo.MsgAlarmFlag = true; TempOffLineInfo.MsgAlarmFlag = true;
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.MsgInfo);
//界面刷新 //界面刷新
// TempOffLineInfo.ProductRefreshFlag = true; // TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
@ -721,6 +753,8 @@ namespace Aucma.Core.ProductOffLine.Business
TempOffLineInfo.MsgInfo = "条码重复,plc应答字2,禁止重复放行,上传时间:" + offLineInfo.ProductScanTime; TempOffLineInfo.MsgInfo = "条码重复,plc应答字2,禁止重复放行,上传时间:" + offLineInfo.ProductScanTime;
AddExceptionRecord(TempOffLineInfo.ProductSNCode, TempOffLineInfo.MsgInfo);
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
return false; return false;
} }

@ -1,4 +1,5 @@
using System; using SqlSugar;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -6,7 +7,7 @@ using System.Threading.Tasks;
namespace Aucma.Core.ProductOffLine.Models namespace Aucma.Core.ProductOffLine.Models
{ {
public class QualityInspectionModel public class ExceptionModel
{ {
/// <summary> /// <summary>
/// 序号 /// 序号
@ -17,17 +18,27 @@ namespace Aucma.Core.ProductOffLine.Models
/// </summary> /// </summary>
public int ObjId { get; set; } public int ObjId { get; set; }
/// <summary> /// <summary>
/// 质检项编号 /// 产品条码
/// </summary> /// </summary>
public string? QualityDefectCode { get; set; }
public string? ProductSnCode { get; set; }
/// <summary> /// <summary>
/// 质检项名称 /// 异常信息
/// </summary> /// </summary>
public string? QualityDefectName { get; set; }
public string ?ExceptionMsg { get; set; }
/// <summary> /// <summary>
/// 是否校验 /// 扫描时间
/// </summary> /// </summary>
public string? IsInSpection { get; set; }
public DateTime? ProductScanTime { get; set; }
/// <summary>
/// 产线编号
/// </summary>
public string? ProductLineCode { get; set; }
} }
} }

@ -6,6 +6,7 @@ using Admin.Core.IService.ISys;
using Admin.Core.Model; using Admin.Core.Model;
using Admin.Core.Repository; using Admin.Core.Repository;
using Admin.Core.Service; using Admin.Core.Service;
using Admin.Core.Socket;
using Admin.Core.Tasks; using Admin.Core.Tasks;
using Aucma.Core.RunPlc; using Aucma.Core.RunPlc;
using Aucma.Core.Scanner; using Aucma.Core.Scanner;
@ -14,6 +15,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net.Sockets;
using System.Text; using System.Text;
namespace Aucma.Core.ProductOffLine namespace Aucma.Core.ProductOffLine
@ -65,8 +67,12 @@ namespace Aucma.Core.ProductOffLine
//扫码器 //扫码器
services.AddScannerSetup(); services.AddScannerSetup();
//socketÁ¬½ÓɨÂëÆ÷
// services.AddTouchSocketSetup();
//任务调度 //任务调度
// services.AddJobSetup(); // services.AddJobSetup();
//PLC //PLC
services.AddPlcSetup(); services.AddPlcSetup();
@ -91,19 +97,23 @@ namespace Aucma.Core.ProductOffLine
/// </summary> /// </summary>
/// <param name="app"></param> /// <param name="app"></param>
/// <param name="env"></param> /// <param name="env"></param>
public void Configure(IApplicationBuilder app, IScannerService scannerService, IRunPlcService runPlcService)//, ISysTasksQzService tasksQzService, ISchedulerCenter schedulerCenter public void Configure(IApplicationBuilder app, IScannerService scannerService, IRunPlcService runPlcService)//, ISysTasksQzService tasksQzService, ISchedulerCenter schedulerCenter,ITouchSocketService socket
{ {
// 使用静态文件 // 使用静态文件
app.UseStaticFiles(); app.UseStaticFiles();
// 然后是授权中间件 // 然后是授权中间件
//app.UseAuthorization(); //app.UseAuthorization();
// 开启QuartzNetJob调度服务 // 开启QuartzNetJob调度服务
// app.UseQuartzJobMildd(tasksQzService, schedulerCenter); // app.UseQuartzJobMildd(tasksQzService, schedulerCenter);
//开启扫码服务 //开启扫码服务
app.UseScannerMildd(scannerService); app.UseScannerMildd(scannerService);
//PLC //PLC
app.UsePlcMildd(runPlcService); app.UsePlcMildd(runPlcService);
// SocketÁ¬½ÓɨÂëÆ÷
// app.UseTouchSocketMildd(socket);
} }
#region 注册服务 #region 注册服务

@ -26,6 +26,7 @@ namespace Aucma.Core.ProductOffLine.ViewModels
private readonly IBaseMaterialInfoServices? _baseMaterialInfoServices; private readonly IBaseMaterialInfoServices? _baseMaterialInfoServices;
public DirectionEditViewModel() { public DirectionEditViewModel() {
DirectionItemViewModel.RefreshPageEvent += ExecuteQuery;
_baseMaterialInfoServices = App.ServiceProvider.GetService<IBaseMaterialInfoServices>(); _baseMaterialInfoServices = App.ServiceProvider.GetService<IBaseMaterialInfoServices>();
QueryCommand = new RelayCommand(ExecuteQuery); QueryCommand = new RelayCommand(ExecuteQuery);
MouseClickCommand = new RelayCommand<object>(MouseClick); MouseClickCommand = new RelayCommand<object>(MouseClick);
@ -40,7 +41,6 @@ namespace Aucma.Core.ProductOffLine.ViewModels
ExecuteQuery(); ExecuteQuery();
} }
private async void ExecuteQuery() private async void ExecuteQuery()
{ {
try try

@ -25,7 +25,10 @@ namespace Aucma.Core.ProductOffLine.ViewModels
public RelayCommand SaveCommand { get; set; } public RelayCommand SaveCommand { get; set; }
public delegate void RefreshPage();
public static event RefreshPage? RefreshPageEvent;
private readonly IBaseMaterialInfoServices? _baseMaterialInfoServices; private readonly IBaseMaterialInfoServices? _baseMaterialInfoServices;
public DirectionItemViewModel(DirectionEditModel info) { public DirectionItemViewModel(DirectionEditModel info) {
_baseMaterialInfoServices = App.ServiceProvider.GetService<IBaseMaterialInfoServices>(); _baseMaterialInfoServices = App.ServiceProvider.GetService<IBaseMaterialInfoServices>();
@ -107,19 +110,29 @@ namespace Aucma.Core.ProductOffLine.ViewModels
} }
private async void updateDirection() private async void updateDirection()
{ {
BaseMaterialInfo info = await _baseMaterialInfoServices.FirstAsync(x=>x.ObjId==PlanInfo.ObjId); try
if (IsSelectedOptionA)
{
info.InboundDirection = "A";
}
else
{ {
info.InboundDirection = "B"; BaseMaterialInfo info = await _baseMaterialInfoServices.FirstAsync(x => x.ObjId == PlanInfo.ObjId);
if (IsSelectedOptionA)
{
info.InboundDirection = "A";
}
else
{
info.InboundDirection = "B";
}
bool result = await _baseMaterialInfoServices.UpdateAsync(info);
if (result)
{
MessageBox.Show(info.MaterialName + "入库方向修改成功");
}
//刷新页面
RefreshPageEvent?.Invoke();
} }
bool result = await _baseMaterialInfoServices.UpdateAsync(info); catch (Exception ex)
if (result)
{ {
MessageBox.Show(info.MaterialName+"入库方向修改成功"); Console.WriteLine("updateDirection异常:" + ex.Message.ToString());
} }
} }

@ -27,24 +27,24 @@ namespace Aucma.Core.ProductOffLine.ViewModels
private readonly IBaseQualityInspectionItemInfoServices? _baseQualityInspectionItemInfoServices; private readonly IBaseQualityInspectionItemInfoServices? _baseQualityInspectionItemInfoServices;
public QualityItemViewModel(QualityInspectionModel info) { public QualityItemViewModel(ExceptionModel info) {
_baseQualityInspectionItemInfoServices = App.ServiceProvider.GetService<IBaseQualityInspectionItemInfoServices>(); _baseQualityInspectionItemInfoServices = App.ServiceProvider.GetService<IBaseQualityInspectionItemInfoServices>();
CloseWindowCommand = new RelayCommand<object>(t => CloseWindow(t)); CloseWindowCommand = new RelayCommand<object>(t => CloseWindow(t));
SaveCommand = new RelayCommand(updateDirection); SaveCommand = new RelayCommand(updateDirection);
PlanInfo = info; PlanInfo = info;
if("是".Equals(info.IsInSpection)){ //if("是".Equals(info.IsInSpection)){
IsSelectedOptionA = true; // IsSelectedOptionA = true;
} //}
else //else
{ //{
IsSelectedOptionB = true; // IsSelectedOptionB = true;
} //}
} }
private QualityInspectionModel planInfo = new QualityInspectionModel(); private ExceptionModel planInfo = new ExceptionModel();
public QualityInspectionModel PlanInfo public ExceptionModel PlanInfo
{ {
get { return planInfo; } get { return planInfo; }
set { set {

@ -31,11 +31,11 @@ namespace Aucma.Core.ProductOffLine.ViewModels
public ICommand QueryCommand { get; set; } public ICommand QueryCommand { get; set; }
public RelayCommand<object> MouseClickCommand { get; set; } public RelayCommand<object> MouseClickCommand { get; set; }
private readonly IBaseQualityInspectionItemInfoServices? _baseQualityInspectionItemInfoServices; private readonly IExceptionRecordServices? exceptionRecordServices;
public SelectQualityViewModel() public SelectQualityViewModel()
{ {
_baseQualityInspectionItemInfoServices = App.ServiceProvider.GetService<IBaseQualityInspectionItemInfoServices>(); exceptionRecordServices = App.ServiceProvider.GetService<IExceptionRecordServices>();
QueryCommand = new RelayCommand(ExecuteQuery); QueryCommand = new RelayCommand(ExecuteQuery);
MouseClickCommand = new RelayCommand<object>(MouseClick); MouseClickCommand = new RelayCommand<object>(MouseClick);
@ -48,6 +48,8 @@ namespace Aucma.Core.ProductOffLine.ViewModels
/// </summary> /// </summary>
public async void Init() public async void Init()
{ {
Count = 0;
ExecuteQuery(); ExecuteQuery();
} }
@ -55,12 +57,35 @@ namespace Aucma.Core.ProductOffLine.ViewModels
{ {
try try
{ {
List<BaseQualityInspectionItemInfo> list = await _baseQualityInspectionItemInfoServices.query(); List<ExceptionRecord> list = await exceptionRecordServices.QueryAsync(x=>x.ProductScanTime>=DateTime.Today);
qualityItemGrid.Clear(); if (list == null || list.Count == 0) {
for (int i = 0; i < list.Count; i++) App.Current.Dispatcher.Invoke(() =>
{ {
qualityItemGrid.Add(new QualityInspectionModel() { No = i + 1, ObjId = list[i].ObjId, QualityDefectCode = list[i].QualityDefectCode, QualityDefectName = list[i].QualityDefectName, IsInSpection = list[i].IsInSpection == "0" ? "否" : "是" }); exceptionItemGrid.Clear();
Count = 0;
});
return;
} }
list = list.OrderByDescending(x=>x.ProductScanTime).ToList();
App.Current.Dispatcher.Invoke(() =>
{
exceptionItemGrid.Clear();
Count = list.Count;
for (int i = 0; i < list.Count; i++)
{
ExceptionModel model = new ExceptionModel();
model.No = exceptionItemGrid.Count+1;
model.ObjId = list[i].ObjId;
model.ProductSnCode = list[i].ProductSnCode;
model.ExceptionMsg = list[i].ExceptionMsg;
model.ProductScanTime = list[i].ProductScanTime;
model.ProductLineCode = list[i].ProductLineCode;
exceptionItemGrid.Add(model);
}
});
} }
catch (Exception) catch (Exception)
{ {
@ -70,7 +95,7 @@ namespace Aucma.Core.ProductOffLine.ViewModels
public void MouseClick(object obj) public void MouseClick(object obj)
{ {
var info = SelectedDataItem as QualityInspectionModel; var info = SelectedDataItem as ExceptionModel;
if (info != null) if (info != null)
{ {
QualityWindow quantityIssuedWindow = new QualityWindow(info); QualityWindow quantityIssuedWindow = new QualityWindow(info);
@ -81,8 +106,8 @@ namespace Aucma.Core.ProductOffLine.ViewModels
private QualityInspectionModel selectedDataItem; private ExceptionModel selectedDataItem;
public QualityInspectionModel SelectedDataItem public ExceptionModel SelectedDataItem
{ {
get { return selectedDataItem; } get { return selectedDataItem; }
set set
@ -92,16 +117,27 @@ namespace Aucma.Core.ProductOffLine.ViewModels
} }
} }
private int count;
public int Count
{
get { return count; }
set
{
count = value;
OnPropertyChanged();
}
}
#region 初始化datagrid #region 初始化datagrid
private ObservableCollection<QualityInspectionModel> qualityItemGrid = new ObservableCollection<QualityInspectionModel>(); private ObservableCollection<ExceptionModel> exceptionItemGrid = new ObservableCollection<ExceptionModel>();
public ObservableCollection<QualityInspectionModel> QualityItemGrid public ObservableCollection<ExceptionModel> ExceptionItemGrid
{ {
get { return qualityItemGrid; } get { return exceptionItemGrid; }
set set
{ {
qualityItemGrid = value; exceptionItemGrid = value;
OnPropertyChanged();//属性通知 OnPropertyChanged();//属性通知
} }
} }

@ -17,8 +17,8 @@
<Label Content="扫码枪扫描位置:" FontSize="20" Foreground="White" HorizontalAlignment="Left" Margin="108,131,0,0" VerticalAlignment="Top" Height="50" Width="161"/> <Label Content="扫码枪扫描位置:" FontSize="20" Foreground="White" HorizontalAlignment="Left" Margin="108,131,0,0" VerticalAlignment="Top" Height="50" Width="161"/>
<ComboBox Name="SelectedMaterialType" Margin="290,120,167,0" FontSize="30" Foreground="White" VerticalAlignment="Top"> <ComboBox Name="SelectedMaterialType" Margin="290,120,167,0" FontSize="30" Foreground="White" VerticalAlignment="Top">
<ComboBoxItem Content="侧提升机" Foreground="Blue"/> <ComboBoxItem Content="侧提升机" Foreground="Blue"/>
<ComboBoxItem Content="侧提升机" Foreground="Blue" /> <ComboBoxItem Content="西侧提升机" Foreground="Blue" />
</ComboBox> </ComboBox>
</Grid> </Grid>

@ -6,7 +6,7 @@
xmlns:local="clr-namespace:Aucma.Core.ProductOffLine.Views" xmlns:local="clr-namespace:Aucma.Core.ProductOffLine.Views"
mc:Ignorable="d" WindowStartupLocation="CenterScreen" FontFamily="Microsoft YaHei" mc:Ignorable="d" WindowStartupLocation="CenterScreen" FontFamily="Microsoft YaHei"
Title="选择方向" Height="500" Width="500" Name="window" Background="White" Title="选择方向" Height="500" Width="500" Name="window" Background="White"
ResizeMode="NoResize" Topmost="True"> ResizeMode="NoResize" >
<Border Margin="5" Background="#1254AB" CornerRadius="10"> <Border Margin="5" Background="#1254AB" CornerRadius="10">
<Border.Effect> <Border.Effect>
<DropShadowEffect Color="Gray" ShadowDepth="0" BlurRadius="5" Opacity="0.3" Direction="0"></DropShadowEffect> <DropShadowEffect Color="Gray" ShadowDepth="0" BlurRadius="5" Opacity="0.3" Direction="0"></DropShadowEffect>

@ -9,8 +9,8 @@
<Grid Background="#1152AC" > <Grid Background="#1152AC" >
<Button Content="侧提升机" Click="LeftButton_Click" Height="70" Background="Green" Width="130" Margin="49,107,221,88" /> <Button Content="侧提升机" Click="LeftButton_Click" Height="70" Background="Green" Width="130" Margin="49,107,221,88" />
<Button Content="侧提升机" Click="RightButton_Click" Height="70" Background="Green" Width="130" Margin="220,107,50,88" /> <Button Content="西侧提升机" Click="RightButton_Click" Height="70" Background="Green" Width="130" Margin="220,107,50,88" />
</Grid> </Grid>

@ -306,13 +306,14 @@
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True"
Foreground="White" > Foreground="White" >
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Binding="{Binding No}" Header="序号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding No}" Header="序号" Width="0.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding ProductOrderNo}" Header="订单编号" Width="3*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding ProductOrderNo}" Header="订单编号" Width="2.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding ProductSNCode}" Header="产品条码" Width="3*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding ProductSNCode}" Header="产品条码" Width="2.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding ProductModel}" Header="产品型号" Width="3*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" /> <DataGridTextColumn Binding="{Binding ProductModel}" Header="产品型号" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding ProductRemark}" Header="特征信息" Width="3*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding ProductRemark}" Header="特征信息" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding QualityResult}" Header="质检结果" Width="*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding QualityResult}" Header="质检结果" Width="*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding ProductScanTime,StringFormat=\{0:yyyy-MM-dd HH:mm:ss\}}" Header="扫描时间" Width="3*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding QualityResult}" Header="69码校验" Width="*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding ProductScanTime,StringFormat=\{0:yyyy-MM-dd HH:mm:ss\}}" Header="扫描时间" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>

@ -59,13 +59,13 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="1.5*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="#1157b9" Margin="1,1,5,5" > <Border Grid.Row="0" Grid.Column="0" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="#1157b9" Margin="1,1,5,5" >
<TextBlock Text="入库设置" FontSize="20" FontWeight="Bold" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/> <TextBlock Text="入库设置" FontSize="20" FontWeight="Bold" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border> </Border>
<Border Grid.Row="0" Grid.Column="1" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="#1157b9" Margin="1,1,5,5" > <Border Grid.Row="0" Grid.Column="1" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="#1157b9" Margin="1,1,5,5" >
<TextBlock Text="质检设置" FontSize="20" FontWeight="Bold" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/> <TextBlock Text="异常记录" FontSize="20" FontWeight="Bold" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border> </Border>
<Grid Grid.Row="1"> <Grid Grid.Row="1">
<WrapPanel VerticalAlignment="Center" HorizontalAlignment="Left"> <WrapPanel VerticalAlignment="Center" HorizontalAlignment="Left">

@ -6,7 +6,7 @@
xmlns:local="clr-namespace:Aucma.Core.ProductOffLine.Views" xmlns:local="clr-namespace:Aucma.Core.ProductOffLine.Views"
mc:Ignorable="d" WindowStartupLocation="CenterScreen" mc:Ignorable="d" WindowStartupLocation="CenterScreen"
Title="选择方向" Height="500" Width="500" Name="window" Background="White" Title="选择方向" Height="500" Width="500" Name="window" Background="White"
ResizeMode="NoResize" Topmost="True"> ResizeMode="NoResize" >
<Border Margin="5" Background="#1254AB" CornerRadius="10"> <Border Margin="5" Background="#1254AB" CornerRadius="10">
<Border.Effect> <Border.Effect>
<DropShadowEffect Color="Gray" ShadowDepth="0" BlurRadius="5" Opacity="0.3" Direction="0"></DropShadowEffect> <DropShadowEffect Color="Gray" ShadowDepth="0" BlurRadius="5" Opacity="0.3" Direction="0"></DropShadowEffect>

@ -24,7 +24,7 @@ namespace Aucma.Core.ProductOffLine.Views
{ {
private QualityItemViewModel viewModel = null; private QualityItemViewModel viewModel = null;
public QualityWindow(QualityInspectionModel info) public QualityWindow(ExceptionModel info)
{ {
InitializeComponent(); InitializeComponent();
this.DataContext = new QualityItemViewModel(info); this.DataContext = new QualityItemViewModel(info);

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Aucma.Core.ProductOffLine.Views" xmlns:local="clr-namespace:Aucma.Core.ProductOffLine.Views"
mc:Ignorable="d" Background="Transparent" FontFamily="Microsoft YaHei" mc:Ignorable="d" Background="Transparent" FontFamily="Microsoft YaHei"
d:DesignHeight="800" d:DesignWidth="400" > d:DesignHeight="800" d:DesignWidth="800" >
<UserControl.Resources> <UserControl.Resources>
<Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type TextBlock}"> <Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type TextBlock}">
<Setter Property="FontSize" Value="20"/> <Setter Property="FontSize" Value="20"/>
@ -100,22 +100,27 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal" Grid.Column="1" Grid.ColumnSpan="3"> <StackPanel Grid.Row="0" Orientation="Horizontal" Grid.Column="1" Grid.ColumnSpan="3">
<Button Content="刷 新" Command="{Binding QueryCommand}" Background="#007DFA" BorderBrush="#007DFA" VerticalAlignment="Center" Foreground="White" Height="30" Width="100" /> <Button Content="刷 新" Command="{Binding QueryCommand}" Background="#007DFA" BorderBrush="#007DFA" VerticalAlignment="Center" Foreground="White" Height="30" Width="100" />
</StackPanel>
<StackPanel Grid.Row="0" Orientation="Horizontal" Grid.Column="3" Grid.ColumnSpan="3" >
<Label Content="当日异常记录数: " FontSize="20" Height="40" HorizontalAlignment="Center" Foreground="White"/>
<TextBlock Text="{Binding Count}" Foreground="White" FontSize="20" Height="30" HorizontalAlignment="Center"/>
</StackPanel> </StackPanel>
<!--计划列表--> <!--计划列表-->
<Border Grid.Row="1" BorderBrush="#1254AB" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="1,1,5,5" Grid.ColumnSpan="4"> <Border Grid.Row="1" BorderBrush="#1254AB" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="1,1,5,5" Grid.ColumnSpan="4">
<DataGrid Name="qualityItemGrid" ItemsSource="{Binding QualityItemGrid}" ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}" <DataGrid Name="qualityItemGrid" ItemsSource="{Binding ExceptionItemGrid}" ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto" GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True"
Foreground="White" SelectedItem="{Binding SelectedDataItem}" MouseLeftButtonDown="dataGrid_MouseLeftButtonDown"> Foreground="White" ><!--SelectedItem="{Binding SelectedDataItem}" MouseLeftButtonDown="dataGrid_MouseLeftButtonDown"-->
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Binding="{Binding No}" Header="序号" Width="1*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding No}" Header="序号" Width="1*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding QualityDefectCode}" Header="质检编号" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <!--<DataGridTextColumn Binding="{Binding ProductSnCode}" Header="产品条码" Width="2.5*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->
<DataGridTextColumn Binding="{Binding QualityDefectName}" Header="质检名称" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding ExceptionMsg}" Header="异常信息" Width="4*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn x:Name="test11" Binding="{Binding IsInSpection}" Header="是否校验" Width="*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" /> <DataGridTextColumn Binding="{Binding ProductScanTime,StringFormat=\{0:yyyy-MM-dd HH:mm:ss\}}" Header="扫描时间" Width="2.2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<!--<DataGridTextColumn x:Name="test11" Binding="{Binding IsInSpection}" Header="是否校验" Width="*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />-->
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
<!--<DataGridTemplateColumn.CellTemplate> <!--<DataGridTemplateColumn.CellTemplate>

Loading…
Cancel
Save