diff --git a/Admin.Core.Model/Model_New/OffLineInfo.cs b/Admin.Core.Model/Model_New/OffLineInfo.cs
index b78140fc..7b56f500 100644
--- a/Admin.Core.Model/Model_New/OffLineInfo.cs
+++ b/Admin.Core.Model/Model_New/OffLineInfo.cs
@@ -62,5 +62,15 @@ namespace Admin.Core.Model
///
[SugarColumn(ColumnName = "PRODUCT_LINE_CODE")]
public string ProductLineCode { get; set; } //扫描时间
+ ///
+ /// 上传条码系统保存接口返回信息
+ ///
+ [SugarColumn(ColumnName = "SAVE_RETURN_INFO")]
+ public string SaveRetuenInfo { get; set; }
+ ///
+ /// 当前登录班组(一线白班,一线夜班,二线白班,二线夜班)
+ ///
+ [SugarColumn(ColumnName = "LOGIN_TEAM")]
+ public string LoginTeam { get; set; }
}
}
diff --git a/Aucma.Core.ProductOffLine/Aucma.Core.ProductOffLine.csproj b/Aucma.Core.ProductOffLine/Aucma.Core.ProductOffLine.csproj
index 48bc648f..244070ed 100644
--- a/Aucma.Core.ProductOffLine/Aucma.Core.ProductOffLine.csproj
+++ b/Aucma.Core.ProductOffLine/Aucma.Core.ProductOffLine.csproj
@@ -36,7 +36,7 @@
- PreserveNewest
+ Always
true
PreserveNewest
diff --git a/Aucma.Core.ProductOffLine/Business/MvCodeHelper.cs b/Aucma.Core.ProductOffLine/Business/MvCodeHelper.cs
index 2f7bd499..b87e5eef 100644
--- a/Aucma.Core.ProductOffLine/Business/MvCodeHelper.cs
+++ b/Aucma.Core.ProductOffLine/Business/MvCodeHelper.cs
@@ -2,12 +2,14 @@
using Aucma.Core.Scanner;
using log4net;
using MvCodeReaderSDKNet;
+using NPOI.SS.Formula.Functions;
using StackExchange.Profiling;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using UAParser;
@@ -99,6 +101,8 @@ namespace Aucma.Core.ProductOffLine.Business
}
else
{
+ // 更新存活时间
+ LinerLiveTime = DateTime.Now;
Console.WriteLine(DateTime.Now + ":外侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
log.Info(DateTime.Now + ":外侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
}
@@ -153,6 +157,8 @@ namespace Aucma.Core.ProductOffLine.Business
}
else
{
+ // 更新存活时间
+ LinerLiveTime = DateTime.Now;
Console.WriteLine(DateTime.Now + "内侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
log.Info(DateTime.Now + "内侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
}
@@ -173,7 +179,7 @@ namespace Aucma.Core.ProductOffLine.Business
public static void Shell()
{
-
+ ShellLiveTime = DateTime.Now;
MvCodeReader.cbOutputEx2delegate ImageCallback;
MvCodeReader.MV_CODEREADER_IMAGE_OUT_INFO_EX2 stFrameInfo = new MvCodeReader.MV_CODEREADER_IMAGE_OUT_INFO_EX2();
@@ -187,12 +193,23 @@ namespace Aucma.Core.ProductOffLine.Business
nRet = MvCodeReader.MV_CODEREADER_EnumDevices_NET(ref stDevList, MvCodeReader.MV_CODEREADER_GIGE_DEVICE);
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
+
+ RefreshStateEvent?.Invoke("内侧", false);
+ Thread.Sleep(1000 * 10);
Console.WriteLine("Enum device failed:{0:x8}", nRet);
break;
}
Console.WriteLine("Enum device count : " + Convert.ToString(stDevList.nDeviceNum));
if (0 == stDevList.nDeviceNum)
{
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
+
+ RefreshStateEvent?.Invoke("内侧", false);
+ Thread.Sleep(1000 * 10);
+
break;
}
@@ -217,10 +234,17 @@ namespace Aucma.Core.ProductOffLine.Business
{
nDevIndex = i;
Console.WriteLine("device IP :" + ipStr);
+
}
}
}
- if (nDevIndex < 0) return;
+ if (nDevIndex < 0) {
+ Console.WriteLine("未找到外侧扫码器");
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
+ Thread.Sleep(1000 * 30);
+ break;
+ }
stDevInfo = (MvCodeReader.MV_CODEREADER_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[nDevIndex], typeof(MvCodeReader.MV_CODEREADER_DEVICE_INFO));
// ch:创建设备 | en:Create device
@@ -228,6 +252,8 @@ namespace Aucma.Core.ProductOffLine.Business
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
Console.WriteLine("Create device failed:{0:x8}", nRet);
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
break;
}
@@ -250,6 +276,8 @@ namespace Aucma.Core.ProductOffLine.Business
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
Console.WriteLine("Register image callback failed!");
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
break;
}
@@ -258,6 +286,8 @@ namespace Aucma.Core.ProductOffLine.Business
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
Console.WriteLine("Start grabbing failed:{0:x8}", nRet);
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
break;
}
@@ -265,8 +295,23 @@ namespace Aucma.Core.ProductOffLine.Business
ShellDevice = device;
Console.WriteLine("Press enter to exit");
Console.WriteLine(DateTime.Now.ToString());
- Console.ReadLine();
-
+ while (true)
+ {
+ Thread.Sleep(1000*60);
+ DateTime dateTime = DateTime.Now;
+ TimeSpan timeSpan = dateTime.Subtract(ShellLiveTime);
+ if (timeSpan.TotalMinutes >= 10)
+ {
+ Console.WriteLine("外侧扫码器超时");
+ //CloseShell();
+ //Shell();
+ break;
+ }
+
+ }
+ // Console.ReadLine();
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
// ch:停止抓图 | en:Stop grabbing
nRet = device.MV_CODEREADER_StopGrabbing_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
@@ -291,16 +336,16 @@ namespace Aucma.Core.ProductOffLine.Business
break;
}
} while (false);
-
- if (MvCodeReader.MV_CODEREADER_OK != nRet)
- {
- // ch:销毁设备 | en:Destroy device
- nRet = device.MV_CODEREADER_DestroyHandle_NET();
- if (MvCodeReader.MV_CODEREADER_OK != nRet)
- {
- Console.WriteLine("Destroy device failed:{0:x8}", nRet);
- }
- }
+ Shell();
+ //if (MvCodeReader.MV_CODEREADER_OK != nRet)
+ //{
+ // // ch:销毁设备 | en:Destroy device
+ // nRet = device.MV_CODEREADER_DestroyHandle_NET();
+ // if (MvCodeReader.MV_CODEREADER_OK != nRet)
+ // {
+ // Console.WriteLine("Destroy device failed:{0:x8}", nRet);
+ // }
+ //}
}
@@ -308,7 +353,7 @@ namespace Aucma.Core.ProductOffLine.Business
public static void Liner()
{
-
+ LinerLiveTime = DateTime.Now;
MvCodeReader.cbOutputEx2delegate ImageCallback;
MvCodeReader.MV_CODEREADER_IMAGE_OUT_INFO_EX2 stFrameInfo = new MvCodeReader.MV_CODEREADER_IMAGE_OUT_INFO_EX2();
@@ -322,12 +367,22 @@ namespace Aucma.Core.ProductOffLine.Business
nRet = MvCodeReader.MV_CODEREADER_EnumDevices_NET(ref stDevList, MvCodeReader.MV_CODEREADER_GIGE_DEVICE);
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
+
+ RefreshStateEvent?.Invoke("内侧", false);
+ Thread.Sleep(1000 * 10);
Console.WriteLine("Enum device failed:{0:x8}", nRet);
break;
}
Console.WriteLine("Enum device count : " + Convert.ToString(stDevList.nDeviceNum));
if (0 == stDevList.nDeviceNum)
{
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
+
+ RefreshStateEvent?.Invoke("内侧", false);
+ Thread.Sleep(1000 * 10);
break;
}
@@ -355,7 +410,15 @@ namespace Aucma.Core.ProductOffLine.Business
}
}
}
- if (nDevIndex < 0) return;
+ if (nDevIndex < 0)
+ {
+ Console.WriteLine("未找到内侧扫码器");
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("内侧", false);
+ Thread.Sleep(1000 * 30);
+ break;
+ }
+
stDevInfo = (MvCodeReader.MV_CODEREADER_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[nDevIndex], typeof(MvCodeReader.MV_CODEREADER_DEVICE_INFO));
// ch:创建设备 | en:Create device
@@ -399,7 +462,21 @@ namespace Aucma.Core.ProductOffLine.Business
Console.WriteLine("Press enter to exit");
Console.WriteLine(DateTime.Now.ToString());
- Console.ReadLine();
+ while (true)
+ {
+ Thread.Sleep(1000*60);
+ DateTime dateTime = DateTime.Now;
+ TimeSpan timeSpan = dateTime.Subtract(LinerLiveTime);
+ if (timeSpan.TotalMinutes >= 10)
+ {
+ Console.WriteLine("内侧扫码器超时");
+ //CloseShell();
+ //Shell();
+ break;
+ }
+
+ }
+ //Console.ReadLine();
// ch:停止抓图 | en:Stop grabbing
nRet = device.MV_CODEREADER_StopGrabbing_NET();
@@ -424,6 +501,7 @@ namespace Aucma.Core.ProductOffLine.Business
Console.WriteLine("Destroy device failed:{0:x8}", nRet);
break;
}
+
} while (false);
if (MvCodeReader.MV_CODEREADER_OK != nRet)
@@ -435,6 +513,7 @@ namespace Aucma.Core.ProductOffLine.Business
Console.WriteLine("Destroy device failed:{0:x8}", nRet);
}
}
+ Liner();
}
diff --git a/Aucma.Core.ProductOffLine/Business/offLineBusiness.cs b/Aucma.Core.ProductOffLine/Business/offLineBusiness.cs
index c2f7ab18..a6c3b68a 100644
--- a/Aucma.Core.ProductOffLine/Business/offLineBusiness.cs
+++ b/Aucma.Core.ProductOffLine/Business/offLineBusiness.cs
@@ -1,11 +1,14 @@
using Admin.Core.Common;
+using Admin.Core.Common.Config;
using Admin.Core.IService;
using Admin.Core.Model;
using Admin.Core.Model.Model_New;
using Admin.Core.Service;
using Aucma.Core.HwPLc;
using Aucma.Core.ProductOffLine;
+using Aucma.Core.ProductOffLine.Config;
using Aucma.Core.ProductOffLine.Models;
+using Aucma.Core.ProductOffLine.Views;
using Aucma.Core.Scanner;
using log4net;
using Microsoft.Extensions.DependencyInjection;
@@ -23,6 +26,7 @@ using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
+using System.Reflection.Metadata.Ecma335;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
@@ -62,6 +66,7 @@ namespace Aucma.Core.ProductOffLine.Business
#endregion
#region 接口引用
+ private AppConfig appConfig = AppConfig.Instance;
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OffLineBusiness));
@@ -104,7 +109,8 @@ namespace Aucma.Core.ProductOffLine.Business
public OffLineBusiness()
{
MvCodeHelper.RefreshMaterialCodeStrEvent += MaterialBarScan;
- // test();
+ ChooseDirectionWindow.SendPlcPassEvent += DownLoadPassFlag;
+ test();
}
#region 变量定义
///
@@ -116,11 +122,11 @@ namespace Aucma.Core.ProductOffLine.Business
public void test()
{
- // private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OffLineBusiness));
- // string result = _productOffLineServices.QueryChecked("1520870000099E2V0004");
- // string result = _productOffLineServices.QueryChecked("1530080CD0098E1V1714");
- // Console.WriteLine(result);
- // string strSave = _productOffLineServices.SaveBarcodeInfo("1520870000099E2V0004", "ILS_SORT", result.Replace("0000",""), 1);
+ // private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OffLineBusiness));
+ // string result = _productOffLineServices.QueryChecked("1520870000099E2V0004");
+ // string result = _productOffLineServices.QueryChecked("1530080CD0098E1V1714");
+ // Console.WriteLine(result);
+ // string strSave = _productOffLineServices.SaveBarcodeInfo("1520870000099E2V0004", "ILS_SORT", result.Replace("0000",""), 1);
// LogHelper.Info("成品码:1520870000099E2V0004"+strSave);
// string tt = "Y@1104@16160030000000910780@000010034895@@ @000000@000000009000004899@BCD-160C,家电下乡@@BCD-160C@皓月白-家电下乡@161601300@160@1-00版@家电下乡产品@默认@2010-09-01";
Task.Run(() =>
@@ -128,14 +134,23 @@ namespace Aucma.Core.ProductOffLine.Business
//while (true)
//{
Thread.Sleep(5000);
- Random random = new Random();
- MaterialBarScan("32160030000000912" + random.Next(100, 999), "10.10.92.141");
- Thread.Sleep(3000);
- Random random1 = new Random();
- MaterialBarScan("99160030000000912" + random1.Next(100, 999), "10.10.92.141");
- Thread.Sleep(3000);
- Random random2 = new Random();
- MaterialBarScan("44160030000000912" + random2.Next(100, 999), "10.10.92.141");
+ // string aa = appConfig.BarCodeAccount;
+ // string bb = appConfig.ProductlineCode;
+ // appConfig.BarCodeAccount = "123";
+ //TempOffLineInfo1.QualityResult = "失败";
+ //TempOffLineInfo1.ProductSNCode = "323222444"; //产品SN条码*1
+ //TempOffLineInfo1.ProductScanTime = System.DateTime.Now; // 扫码时间*2
+ //TempOffLineInfo1.MsgInfo = "条码质检失败:";
+ //RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo1);
+ // Random random = new Random();
+ // MaterialBarScan("32160030000000912" + random.Next(100, 999), "10.10.92.141");
+
+ //Thread.Sleep(3000);
+ //Random random1 = new Random();
+ //MaterialBarScan("99160030000000912" + random1.Next(100, 999), "10.10.92.141");
+ //Thread.Sleep(3000);
+ //Random random2 = new Random();
+ //MaterialBarScan("44160030000000912" + random2.Next(100, 999), "10.10.92.141");
// }
// Thread.Sleep(1000);
@@ -173,16 +188,26 @@ namespace Aucma.Core.ProductOffLine.Business
if (!BackResult)
{
log.Info("条码:" + TempOffLineInfo1.ProductSNCode + "对接条码系统处理失败,禁止放行,流程结束");
+
return;
}
// TempOffLineInfo1.ProductRefreshFlag = true;
// 2.更新mes数据库
BackResult = updateMesData(TempOffLineInfo1);
- BackResult = true; // 测试
+
+ // BackResult = true; // 测试
// 3.plc放行
if (BackResult)
{
-
+ try
+ {
+ //刷新统计图表
+ RefreshChartsEvent?.Invoke();
+ }
+ catch (Exception ex)
+ {
+ log.Error("刷新统计图表出错:" + ex.Message.ToString());
+ }
bool plcResult = SendAndWaitSignal(ScannerNo, materialType);
//if (plcResult)
//{
@@ -199,15 +224,7 @@ namespace Aucma.Core.ProductOffLine.Business
// TempOffLineInfo1.ProductRefreshFlag = true;
//}
log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo1.ProductOrderNo, TempOffLineInfo1.OrderQty));
- try
- {
- //刷新统计图表
- RefreshChartsEvent?.Invoke();
- }
- catch(Exception ex)
- {
- log.Error("刷新统计图表出错:"+ex.Message.ToString());
- }
+
}
else
{
@@ -232,11 +249,20 @@ namespace Aucma.Core.ProductOffLine.Business
// TempOffLineInfo2.ProductRefreshFlag = true;
// 2.更新mes数据库
BackResult = updateMesData(TempOffLineInfo2);
- BackResult = true;
+
+ //BackResult = true;
// 3.plc放行
if (BackResult)
{
-
+ try
+ {
+ //刷新统计图表
+ RefreshChartsEvent?.Invoke();
+ }
+ catch (Exception ex)
+ {
+ log.Error("刷新统计图表出错:" + ex.Message.ToString());
+ }
bool plcResult = SendAndWaitSignal(ScannerNo, materialType);
//if (plcResult)
@@ -254,14 +280,7 @@ namespace Aucma.Core.ProductOffLine.Business
// TempOffLineInfo2.ProductRefreshFlag = true;
//}
log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo2.ProductOrderNo, TempOffLineInfo2.OrderQty));
- try
- {
- //刷新统计图表
- RefreshChartsEvent?.Invoke();
- }catch(Exception ex)
- {
- log.Error("刷新页面异常"+ex.Message.ToString());
- }
+
}
@@ -327,49 +346,76 @@ namespace Aucma.Core.ProductOffLine.Business
// 产线
info11.ProductLineCode = "CX_02";
+ info11.SaveRetuenInfo = TempOffLineInfo.MsgInfo;
+ info11.LoginTeam = appConfig.LoginTeam;
// 查询本地数据库是否有数据
OffLineInfo offLineInfo = _offLineInfoServices.FirstAsync(x => x.ProductSNCode == TempOffLineInfo.ProductSNCode).Result;
if(offLineInfo == null)
{
- _offLineInfoServices.AddAsync(info11);
- }
-
- // 修改订单表
- ////6.更新mes 数据库完成数量和时间(BASE_ORDERINFO) 注意:查询的字段可能需要修改,确保数据一致
-
- ////6.1截取订单号去查询更新BASE_ORDERINFO,全放到service处理
- BaseOrderInfo order = _baseOrderInfoServices.FirstAsync(x => x.OrderCode == TempOffLineInfo.ProductOrderNo).Result;
-
- order.CompleteAmount++;
- if (order.CompleteAmount == order.OrderAmount)
- {
- order.CompleteDate = DateTime.Now;
- }
- order.UpdatedTime = DateTime.Now;
- _baseOrderInfoServices.UpdateAsync(order);
-
+ info11.ProductOrderNo = "0000" + info11.ProductOrderNo;
+ int flag = _offLineInfoServices.AddAsync(info11).Result;
+ if (flag < 0)
+ {
+ TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "插入下线记录失败";
+ TempOffLineInfo.MsgAlarmFlag = true;
+ //界面刷新
+ RefreshScanMateriaCodeEvent(TempOffLineInfo);
+ return false;
+ }
- #region 暂时不启用,因为还没打箱体码,查不到数据,更新过点数据
- //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;
- // _ = _iMaterialCompletionServices.AddAsync(completion).Result;
+ // 不重复上传的条码才更新mes订单完成数
+ // 修改订单表
+ ////6.更新mes 数据库完成数量和时间(BASE_ORDERINFO) 注意:查询的字段可能需要修改,确保数据一致
- //}
+ ////6.1截取订单号去查询更新BASE_ORDERINFO,全放到service处理
+ BaseOrderInfo order = _baseOrderInfoServices.FirstAsync(x => x.OrderCode == TempOffLineInfo.ProductOrderNo).Result;
+ if (order == null)
+ {
+ TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "查询mes订单失败";
+ TempOffLineInfo.MsgAlarmFlag = true;
+ //界面刷新
+ RefreshScanMateriaCodeEvent(TempOffLineInfo);
+ return false;
- #endregion
+ }
+ order.CompleteAmount++;
+ if (order.CompleteAmount == order.OrderAmount)
+ {
+ order.CompleteDate = DateTime.Now;
+ }
+ order.UpdatedTime = DateTime.Now;
+ bool uploadOrder = _baseOrderInfoServices.UpdateAsync(order).Result;
+ if(!uploadOrder)
+ {
+ TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "更新mes订单完成数失败";
+ TempOffLineInfo.MsgAlarmFlag = true;
+ //界面刷新
+ RefreshScanMateriaCodeEvent(TempOffLineInfo);
+ return false;
+ }
+ #region 暂时不启用,因为还没打箱体码,查不到数据,更新过点数据
+ //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;
+ // _ = _iMaterialCompletionServices.AddAsync(completion).Result;
+
+ //}
+ #endregion
+
+ }
return true;
+
}
catch (Exception)
{
@@ -396,6 +442,7 @@ namespace Aucma.Core.ProductOffLine.Business
TempOffLineInfo.ProductSNCode = BarCode.Trim(); //产品SN条码*1
TempOffLineInfo.ProductScanTime = System.DateTime.Now; // 扫码时间*2
TempOffLineInfo.MsgInfo = "条码质检失败:";
+
foreach(ReportQualityInsPection item in qualityList)
{
TempOffLineInfo.MsgInfo += item.QualityDefectName;
@@ -526,10 +573,33 @@ namespace Aucma.Core.ProductOffLine.Business
{
try
{
+ int orderType = 1; // ZP03为在库返工订单,传参数3,默认正常订单1
+ // 先查订单
if (!string.IsNullOrEmpty(TempOffLineInfo.ProductOrderNo))
{
+ // mes查询订单数据,
+ BaseOrderInfo order = _baseOrderInfoServices.FirstAsync(x => x.OrderCode == TempOffLineInfo.ProductOrderNo.Replace("0000", "")).Result;
+ if (order != null)
+ {
+ if (order.OrderType == "ZP03")
+ {
+ orderType = 3;
+ }
+ TempOffLineInfo.OrderQty = order.OrderAmount; // 订单数量*5
+ TempOffLineInfo.ActQty = order.CompleteAmount; // 订单已上传*6
+ }
+ else
+ {
+ TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",MES未查询到订单数据";
+ TempOffLineInfo.MsgAlarmFlag = true;
+ //界面刷新
+ // TempOffLineInfo.ProductRefreshFlag = true;
+ RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
+ return false;
+ }
+
// 条码系统保存接口
- string strSave = _productOffLineServices.SaveBarcodeInfo(TempOffLineInfo.ProductSNCode, "6945", TempOffLineInfo.ProductOrderNo, 1);
+ string strSave = _productOffLineServices.SaveBarcodeInfo(TempOffLineInfo.ProductSNCode, appConfig.BarCodeAccount, TempOffLineInfo.ProductOrderNo, orderType);
// string strSave = "Y";
if (!string.IsNullOrEmpty(strSave))
{
@@ -538,23 +608,7 @@ namespace Aucma.Core.ProductOffLine.Business
log.Info(TempOffLineInfo.ProductSNCode + "上传条码成功:" + strSave);
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",上传条码成功";
- // mes查询订单数据, 异常处理:后期可能根据SN码查箱体码,查订单号并检查更新订单数据
- BaseOrderInfo order = _baseOrderInfoServices.FirstAsync(x => x.OrderCode == TempOffLineInfo.ProductOrderNo.Replace("0000", "")).Result;
- if (order != null)
- {
- TempOffLineInfo.OrderQty = order.OrderAmount; // 订单数量*5
- TempOffLineInfo.ActQty = order.CompleteAmount; // 订单已上传*6
- }
- else
- {
- TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",MES查询订单数据异常";
- TempOffLineInfo.MsgAlarmFlag = true;
- //界面刷新
- // TempOffLineInfo.ProductRefreshFlag = true;
- RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
- // return false;
- }
-
+
//界面刷新
// TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
@@ -568,31 +622,7 @@ namespace Aucma.Core.ProductOffLine.Business
if (strSave.Contains("条码重复"))
{
- // 查询本地数据库是否有数据
- OffLineInfo offLineInfo = _offLineInfoServices.FirstAsync(x => x.ProductSNCode == TempOffLineInfo.ProductSNCode).Result;
- if (offLineInfo != null)
- {
- log.Info(TempOffLineInfo.ProductSNCode + "条码重复,本地已存在,放行");
- TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "条码重复,本地已存在,放行";
- //界面刷新
- // TempOffLineInfo.ProductRefreshFlag = true;
- RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
- return true;
- // chkout:条码重复是否允许放行
- //if (TempOffLineInfo.ChkOut == true)
- //{
- // return true;
- //}
- }
- else
- {
- log.Info(TempOffLineInfo.ProductSNCode + "条码重复,本地不存在,已插入,可以放行");
- OffLineInfo info11 = MapperTwo(TempOffLineInfo);
- // 产线
- info11.ProductLineCode = "CX_02";
- _offLineInfoServices.AddAsync(info11);
- return true;
- }
+ return CodeRepeatProcess(TempOffLineInfo);
}
TempOffLineInfo.MsgAlarmFlag = true;
//界面刷新
@@ -628,12 +658,73 @@ namespace Aucma.Core.ProductOffLine.Business
return false;
}
}
- #region plc交互
- ///
- /// 下发plc放行信号,传进来扫码器编号,分垛方向A或者B,返回plc反馈结果
- ///
- ///
- private bool DownLoadPassFlag(int scannerNo,string strDirection)
+
+ ///
+ /// 条码系统上传重复逻辑20240305经aucma负责人商讨确定
+ /// 如果条码重复,比对mes系统记录,在五分钟以内重复,视为短时间内员工重复推箱子或用扫码枪扫描,可以放行
+ /// 超过五分钟,报警并显示已存在记录时间提示员工,
+ /// 员工判断如果是一码多用,搬下来换新条码重新扫描;如果是同一箱子因为吃饭或停班重复扫描,那么点击屏幕按钮进行放行
+ ///
+ ///
+ public bool CodeRepeatProcess(TempInfo TempOffLineInfo)
+ {
+ try
+ {
+ // 查询本地数据库是否有数据
+ OffLineInfo offLineInfo = _offLineInfoServices.FirstAsync(x => x.ProductSNCode == TempOffLineInfo.ProductSNCode).Result;
+
+ if (offLineInfo != null)
+ {
+ if (offLineInfo.ProductScanTime >= DateTime.Now.AddMinutes(-5)) // 五分钟以内
+ {
+ log.Info(TempOffLineInfo.ProductSNCode + "五分钟内重复上传条码系统,本地已存在,放行");
+ TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "五分钟内重复上传条码系统,放行";
+ //界面刷新
+ // TempOffLineInfo.ProductRefreshFlag = true;
+ RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
+ return true;
+ }
+ else
+ {
+ log.Info(TempOffLineInfo.ProductSNCode + "条码重复,并且距离上次上传超过五分钟,报警并显示已存在记录时间提示员工操作处理");
+ TempOffLineInfo.MsgAlarmFlag = true;
+
+ TempOffLineInfo.MsgInfo = "条码重复,上传间隔超过五分钟禁止放行,人工处理,上传时间:" + offLineInfo.ProductScanTime;
+ //界面刷新
+ // TempOffLineInfo.ProductRefreshFlag = true;
+ RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
+ return false;
+ }
+ }
+ else
+ {
+ log.Info(TempOffLineInfo.ProductSNCode + "条码重复,本地不存在,已插入,放行");
+ OffLineInfo info11 = MapperTwo(TempOffLineInfo);
+ // 产线
+ info11.ProductLineCode = "CX_02";
+ info11.ProductOrderNo = "0000" + info11.ProductOrderNo;
+ info11.SaveRetuenInfo = TempOffLineInfo.MsgInfo;
+ info11.LoginTeam = appConfig.LoginTeam;
+ _offLineInfoServices.AddAsync(info11);
+ return true;
+ }
+ }
+ catch (Exception ex)
+ {
+
+ log.Error("CodeRepeatProcess()异常" + ex.Message.ToString());
+ return false;
+ }
+
+ }
+ #region plc交互
+ ///
+ /// 下发plc放行信号,传进来扫码器编号,分垛方向A或者B,返回plc反馈结果
+ /// scannerNo == 1内侧,scannerNo == 2外侧
+ /// strDirection "A" ? 1 : 2;入库方向A,B
+ ///
+ ///
+ private bool DownLoadPassFlag(int scannerNo,string strDirection)
{
// 入库方向A,B
int direction = strDirection == "A" ? 1 : 2;
diff --git a/Aucma.Core.ProductOffLine/Config/AppConfig.cs b/Aucma.Core.ProductOffLine/Config/AppConfig.cs
new file mode 100644
index 00000000..7ee93185
--- /dev/null
+++ b/Aucma.Core.ProductOffLine/Config/AppConfig.cs
@@ -0,0 +1,57 @@
+using Admin.Core.Common.Config;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Aucma.Core.ProductOffLine.Config
+{
+ public sealed class AppConfig
+ {
+ private static IniHelper iniHelper = new IniHelper(System.Environment.CurrentDirectory + "/config/App.InI");
+
+
+ private static readonly Lazy lazy = new Lazy(() => new AppConfig());
+ public static AppConfig Instance
+ {
+ get
+ {
+ return lazy.Value;
+ }
+ }
+
+
+ public AppConfig()
+ {
+
+ }
+ ///
+ /// 条码系统账号
+ ///
+ public string BarCodeAccount
+ {
+ get { return iniHelper.IniReadValue("system", "BarCodeAccount"); }
+ set { iniHelper.IniWriteValue("system", "BarCodeAccount", value); }
+ }
+
+ ///
+ /// 产线编号
+ ///
+ public string ProductlineCode
+ {
+ get { return iniHelper.IniReadValue("system", "ProductlineCode"); }
+ set { iniHelper.IniWriteValue("system", "ProductlineCode", value); }
+ }
+
+ ///
+ /// 当前登录班组
+ ///
+ public string LoginTeam
+ {
+ get { return iniHelper.IniReadValue("system", "LoginTeam"); }
+ set { iniHelper.IniWriteValue("system", "LoginTeam", value); }
+ }
+
+ }
+}
diff --git a/Aucma.Core.ProductOffLine/Startup.cs b/Aucma.Core.ProductOffLine/Startup.cs
index fc64ab2b..29719ee5 100644
--- a/Aucma.Core.ProductOffLine/Startup.cs
+++ b/Aucma.Core.ProductOffLine/Startup.cs
@@ -66,7 +66,7 @@ namespace Aucma.Core.ProductOffLine
services.AddScannerSetup();
//
- services.AddJobSetup();
+ // services.AddJobSetup();
//PLC
services.AddPlcSetup();
@@ -91,7 +91,7 @@ namespace Aucma.Core.ProductOffLine
///
///
///
- 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
{
// ʹþ̬ļ
app.UseStaticFiles();
@@ -99,7 +99,7 @@ namespace Aucma.Core.ProductOffLine
//app.UseAuthorization();
// QuartzNetJobȷ
- app.UseQuartzJobMildd(tasksQzService, schedulerCenter);
+ // app.UseQuartzJobMildd(tasksQzService, schedulerCenter);
//ɨ
app.UseScannerMildd(scannerService);
//PLC
diff --git a/Aucma.Core.ProductOffLine/ViewModels/IndexPageViewModel.cs b/Aucma.Core.ProductOffLine/ViewModels/IndexPageViewModel.cs
index 89443f65..b586e4bb 100644
--- a/Aucma.Core.ProductOffLine/ViewModels/IndexPageViewModel.cs
+++ b/Aucma.Core.ProductOffLine/ViewModels/IndexPageViewModel.cs
@@ -37,6 +37,8 @@ using Aucma.Core.ProductOffLine.Models;
using System.Globalization;
using Admin.Core.Model.ViewModels;
using ChartsByTime = Admin.Core.Model.ViewModels.ChartsByTime;
+using LiveCharts.Defaults;
+using System.Windows.Documents;
/*
@@ -52,7 +54,7 @@ namespace Aucma.Core.ProductOffLine.ViewModels
// 成品下线操作mes数据
private readonly IOffLineInfoServices? _offLineInfoServices = App.ServiceProvider.GetService();
- // System.Timers.Timer timer = new System.Timers.Timer(500);//界面刷新定时器
+ // System.Timers.Timer timer = new System.Timers.Timer(500);//界面刷新定时器
private readonly IBaseBomInfoServices? _baseBomInfoServices;
private OffLineBusiness offLineBusiness = OffLineBusiness.Instance;
private static double aaa = 100.0;
@@ -61,22 +63,14 @@ namespace Aucma.Core.ProductOffLine.ViewModels
{
OffLineBusiness.RefreshScanMateriaCodeEvent += ModelToPage;
OffLineBusiness.RefreshChartsEvent += RefreshCharts;
- OffLineQty = "235";
+ MainWindowViewModel.RefreshFirstPageChartsEvent += RefreshCharts;
_offLineInfoServices = App.ServiceProvider.GetService();
_baseBomInfoServices = App.ServiceProvider.GetService();
- InitEveryDayMethod();
- // 刷新界面扫码信息
- // RefreshPageListen();
- LoadData();
- //Task.Run(() =>
- //{
- // Thread.Sleep(5000);
- // InitEveryDayMethod();
- // // Thread.Sleep(5000);
- // // InitEveryDayMethod();
- //});
-
- // offLineBusiness.test();
+
+ RefreshCharts();
+
+
+
}
///
@@ -84,10 +78,13 @@ namespace Aucma.Core.ProductOffLine.ViewModels
///
public void RefreshCharts()
{
- InitEveryDayMethod();
- AddDataGrid();
+
+ List list = LoadData();
+ // Console.WriteLine("刷新台数:"+list.Count);
+ InitEveryDayMethod(list);
+
}
-
+
#region 参数定义
@@ -204,7 +201,7 @@ namespace Aucma.Core.ProductOffLine.ViewModels
OnPropertyChanged(nameof(MsgColor));
}
}
-
+
#endregion
@@ -255,7 +252,7 @@ namespace Aucma.Core.ProductOffLine.ViewModels
///
/// 日产量柱状图X轴日期
///
- private List productionHourList;
+ private List productionHourList = new List();
public List ProductionHourList
{
@@ -293,40 +290,7 @@ namespace Aucma.Core.ProductOffLine.ViewModels
#region 界面刷新定时器
- //public void RefreshPageListen()
- //{
- // timer.Elapsed += new System.Timers.ElapsedEventHandler(RefreshPage);
- // timer.AutoReset = true;
- // timer.Enabled = true;
- // timer.Start();
-
- //}
- ///
- /// 定时检测两个扫码实体是否需要刷新
- ///
- ///
- ///
- //public void RefreshPage(object source, System.Timers.ElapsedEventArgs e)
- //{
-
-
- // if (OffLineBusiness.TempOffLineInfo1.ProductRefreshFlag == true)
- // {
- // OffLineBusiness.TempOffLineInfo1.ProductRefreshFlag = false;
- // ModelToPage(OffLineBusiness.TempOffLineInfo1);
- // LoadData();
-
-
-
- // }
- // else if(OffLineBusiness.TempOffLineInfo2.ProductRefreshFlag == true)
- // {
- // OffLineBusiness.TempOffLineInfo2.ProductRefreshFlag = false;
- // ModelToPage(OffLineBusiness.TempOffLineInfo2);
-
- // }
- //}
public void ModelToPage(TempInfo tempInfo)
{
App.Current.Dispatcher.Invoke(() =>
@@ -338,7 +302,7 @@ namespace Aucma.Core.ProductOffLine.ViewModels
OrderQty = tempInfo.OrderQty.ToString();
ActQty = tempInfo.ActQty.ToString();
MsgInfo = tempInfo.MsgInfo;
- if (tempInfo.MsgAlarmFlag==null || tempInfo.MsgAlarmFlag==false)
+ if (tempInfo.MsgAlarmFlag == null || tempInfo.MsgAlarmFlag == false)
{
MsgColor = Brushes.White;
}
@@ -352,159 +316,190 @@ namespace Aucma.Core.ProductOffLine.ViewModels
#endregion
- private async void InitEveryDayMethod()
+
+ private async void InitEveryDayMethod(List list)
{
- await App.Current.Dispatcher.BeginInvoke((Action)(() =>
- {
- Achievement.Clear();
- ProductionHourList = new List();
- // OffLineQty = "232";
- for (int i = 8; i <= 19; i++)
- {
- ProductionHourList.Add(i + ":00");
- }
- //ChartValues achievement2 = new ChartValues();
- //achievement2.Add(74);
- //achievement2.Add(77);
- //achievement2.Add(75);
- //achievement2.Add(6);
- //achievement2.Add(0);
- //achievement2.Add(0);
- //achievement2.Add(0);
- //achievement2.Add(0);
- //achievement2.Add(0);
- //achievement2.Add(0);
- //achievement2.Add(0);
- //achievement2.Add(0);
- //var column2 = new ColumnSeries();
- //column2.DataLabels = true;
- //column2.Title = "产量";
- //column2.Values = achievement2;
- //column2.Foreground = Brushes.White;
- //Achievement.Add(column2);
-
- //MaterialNameList.Add("BCD-162CST,炫金色,A");
- //MaterialNameList.Add("BCD-212CHG,炫金色,A");
- //MaterialNameList.Add("BCD-211CGN,星际灰,A");
- //MaterialNameList.Add("BC/BD-310NF,银河灰,A");
- //MaterialNameList.Add("BC/BD-232WD,银河灰,A");
- //MaterialNameList.Add("BC/BD-145NF,炫金色,ZS,A");
- //ChartValues achievement = new ChartValues();
- //achievement.Add(41);
- //achievement.Add(37);
- //achievement.Add(37);
- //achievement.Add(47);
- //achievement.Add(39);
- //achievement.Add(19);
- //var column = new ColumnSeries();
- //column.DataLabels = true;
- //column.Title = "型号";
- //column.Values = achievement;
- //column.Foreground = Brushes.White;
-
- //ModelStatistics.Add(column);
- #region 小时产量统计
- List listTime = _baseBomInfoServices.getWorkTime().Result;
- if (listTime == null) return;
- // var aa =_offLineInfoServices.Query(x=>x.ProductScanTime>= listTime[0].startTime && x.ProductScanTime<= listTime[11].startTime)
- // List hourAmount = _offLineInfoServices.QueryCharts1("CX_01");
-
- List list = _offLineInfoServices.QueryCharts(listTime[0].startTime, listTime[11].startTime).Result;
-
- if (list == null) return;
- List hourList1 = new List();
- // 当班下线数量
- int sum = 0;
- foreach (ChartsByTime item in list)
- {
- DateTime date = DateTime.ParseExact(item.date + ":00:00", "yyyy-MM-dd/HH:mm:ss", CultureInfo.InvariantCulture);
- ChartsByTimeAmount hour = new ChartsByTimeAmount();
- hour.ProductCode = item.productLineCode;
- hour.ProductDate = date;
- hour.ProductAmount = item.Amount;
- sum += item.Amount;
- hourList1.Add(hour);
- }
- // 当班下线数量页面赋值
- OffLineQty = sum.ToString();
- if (hourList1 == null) return;
-
-
- var hourList = hourList1.Where(x => x.ProductCode.Equals("CX_02") && x.ProductDate >= listTime[0].startTime && x.ProductDate <= listTime[11].startTime);
-
- List xList = new List();
- ChartValues achievement2 = new ChartValues();
- foreach (var item in hourList)
- {
- xList.Add(item.ProductDate.Hour.ToString() + ":00");
- achievement2.Add(item.ProductAmount);
- }
-
- var column2 = new ColumnSeries();
- column2.DataLabels = true;
- column2.Title = "产量";
- column2.Values = achievement2;
- column2.Foreground = Brushes.White;
-
- // Achievement.Clear();
- //Achievement.Add(column2);
- if (Achievement.Count > 0)
- {
- for (int i = 0; i < hourList.Count(); i++)
- {
- Achievement.FirstOrDefault().Values[i] = hourList.ElementAt(i).ProductAmount;
- }
- }
- else
- {
- Achievement.Clear();
- Achievement.Add(column2);
- }
-
- ProductionHourList = xList;
- #endregion
-
-
- #region 型号统计
- List nameList = new List();
- ChartValues achievement = new ChartValues();
- var column = new ColumnSeries();
-
- List offList = _offLineInfoServices.QueryAsync(x => x.ProductScanTime >= listTime[0].startTime && x.ProductScanTime <= listTime[11].startTime).Result;
- var modelList = offList.GroupBy(x => x.ProductModel);
-
- foreach (var item in modelList)
- {
- achievement.Add(item.Count());
- nameList.Add(item.Key);
- }
- column.DataLabels = true;
- column.Title = "型号";
- column.Values = achievement;
- column.Foreground = Brushes.White;
-
- // x轴
- MaterialNameList = null;
- MaterialNameList = nameList;
- // y轴
- if (ModelStatistics.Count > 0)
- {
- for (int i = 0; i < modelList.Count(); i++)
- {
- Achievement.FirstOrDefault().Values[i] = modelList.ElementAt(i).Count();
- }
-
- }
- else
- {
-
- ModelStatistics.Add(column);
- }
-
- }));
- #endregion
-
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ ProductionHourList.Clear();
+ Achievement.Clear();
+ #region 小时产量统计
+ List listTime = _baseBomInfoServices.getWorkTime().Result;
+ if (listTime == null) return;
+ // List xList = new List();
+ foreach (WorkTime workTime in listTime)
+ {
+ // xList.Add(workTime.startTime.Hour.ToString());
+ ProductionHourList.Add(workTime.startTime.Hour.ToString());
+ }
+ // ProductionHourList = xList;
+ // y轴
+ if (list == null || list.Count <= 0) return;
+ var result = list.GroupBy(x => x.ProductScanTime.Hour) // 按照小时进行分组
+ .Select(g => new
+ {
+ Hour = g.Key.ToString(), // 小时
+ Count = g.Count() // 统计每个小时的个数
+ }).ToList();
+
+ ChartValues achievement2 = new ChartValues();
+ int i = 0;
+ foreach (string item in ProductionHourList)
+ {
+ var target = result.Where(x => x.Hour == item).FirstOrDefault();
+ if (target != null)
+ {
+ achievement2.Add(new ObservablePoint(i, target.Count));
+ }
+ else
+ {
+ achievement2.Add(new ObservablePoint(i, 0));
+ }
+ i++;
+ }
+
+ var column2 = new ColumnSeries();
+ column2.DataLabels = true;
+ column2.Title = "产量";
+ column2.Values = achievement2;
+ column2.Foreground = Brushes.White;
+ Achievement.Add(column2);
+ #endregion
+
+ #region 型号统计
+ List nameList = new List();
+ ChartValues achievement = new ChartValues();
+ var column = new ColumnSeries();
+
+ List offList = _offLineInfoServices.QueryAsync(x => x.ProductScanTime >= listTime[0].startTime && x.ProductScanTime <= listTime[11].startTime).Result;
+ var modelList = offList.GroupBy(x => x.ProductModel);
+
+ foreach (var item in modelList)
+ {
+ achievement.Add(item.Count());
+ nameList.Add(item.Key);
+ }
+ column.DataLabels = true;
+ column.Title = "型号";
+ column.Values = achievement;
+ column.Foreground = Brushes.White;
+
+ // x轴
+ MaterialNameList = null;
+ MaterialNameList = nameList;
+ // y轴
+ //if (ModelStatistics.Count > 0)
+ //{
+ // for (int j = 0; j < modelList.Count(); j++)
+ // {
+ // Achievement.FirstOrDefault().Values[j] = modelList.ElementAt(j).Count();
+ // }
+
+ //}
+ //else
+ //{
+ ModelStatistics.Clear();
+ ModelStatistics.Add(column);
+ // }
+
+
+ #endregion
+
+
+
+
+ });
+ }
+
+ private async void InitEveryDayMethod11(List list)
+ {
+
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ ProductionHourList.Clear();
+ Achievement.Clear();
+ #region 小时产量统计
+ List listTime = _baseBomInfoServices.getWorkTime().Result;
+ if (listTime == null) return;
+ // List xList = new List();
+ foreach (WorkTime workTime in listTime)
+ {
+ // xList.Add(workTime.startTime.Hour.ToString());
+ ProductionHourList.Add(workTime.startTime.Hour.ToString());
+ }
+ // ProductionHourList = xList;
+ // y轴
+ if (list == null || list.Count <= 0) return;
+ var result = list.GroupBy(x => x.ProductScanTime.Hour) // 按照小时进行分组
+ .Select(g => new
+ {
+ Hour = g.Key.ToString(), // 小时
+ Count = g.Count() // 统计每个小时的个数
+ }).ToList();
+ ChartValues achievement2 = new ChartValues();
+ foreach (string item in ProductionHourList)
+ {
+ var target = result.Where(x => x.Hour == item).FirstOrDefault();
+ if (target != null)
+ {
+ achievement2.Add(target.Count);
+ }
+ else
+ {
+ achievement2.Add(0);
+ }
+ }
+
+ var column2 = new ColumnSeries();
+ column2.DataLabels = true;
+ column2.Title = "产量";
+ column2.Values = achievement2;
+ column2.Foreground = Brushes.White;
+ Achievement.Add(column2);
+ #endregion
+
+
+ #region 型号统计
+ List nameList = new List();
+ ChartValues achievement = new ChartValues();
+ var column = new ColumnSeries();
+
+ List offList = _offLineInfoServices.QueryAsync(x => x.ProductScanTime >= listTime[0].startTime && x.ProductScanTime <= listTime[11].startTime).Result;
+ var modelList = offList.GroupBy(x => x.ProductModel);
+
+ foreach (var item in modelList)
+ {
+ achievement.Add(item.Count());
+ nameList.Add(item.Key);
+ }
+ column.DataLabels = true;
+ column.Title = "型号";
+ column.Values = achievement;
+ column.Foreground = Brushes.White;
+
+ // x轴
+ MaterialNameList = null;
+ MaterialNameList = nameList;
+ // y轴
+ if (ModelStatistics.Count > 0)
+ {
+ for (int i = 0; i < modelList.Count(); i++)
+ {
+ Achievement.FirstOrDefault().Values[i] = modelList.ElementAt(i).Count();
+ }
+
+ }
+ else
+ {
+
+ ModelStatistics.Add(column);
+ }
+
+
+ #endregion
+
+ });
}
//private async void InitEveryDayMethod()
//{
@@ -553,32 +548,44 @@ namespace Aucma.Core.ProductOffLine.ViewModels
// };
//}
- public void LoadData()
+ public List LoadData()
{
- List listTime = _baseBomInfoServices.getWorkTime().Result;
- if (listTime == null) return;
- List list = _offLineInfoServices.Query(x => x.ProductScanTime >= listTime[0].startTime && x.ProductScanTime <= listTime[11].endTime);
- if(list==null || list.Count<=0) return;
- list = list.OrderBy(x=>x.ProductScanTime).ToList();
- // OffLineInfo record = _offLineInfoServices.FirstAsync().Result;
-
- Application.Current.Dispatcher.Invoke(() =>
+ try
{
- foreach(OffLineInfo record in list)
+
+ List listTime = _baseBomInfoServices.getWorkTime().Result;
+ if (listTime == null) return null;
+ List list = _offLineInfoServices.Query(x => x.ProductScanTime >= listTime[0].startTime && x.ProductScanTime <= listTime[11].endTime && x.ProductLineCode == "CX_02");
+ OffLineQty = list.Count.ToString();
+ if (list == null || list.Count <= 0) return null;
+ list = list.OrderBy(x => x.ProductScanTime).ToList();
+ // OffLineInfo record = _offLineInfoServices.FirstAsync().Result;
+
+ Application.Current.Dispatcher.Invoke(() =>
{
- ListItems.Insert(0, new TempInfo()
+ ListItems.Clear();
+ foreach (OffLineInfo record in list)
{
- No = ListItems.Count + 1,
- ProductOrderNo = record.ProductOrderNo,
- ProductSNCode = record.ProductSNCode,
- ProductModel = record.ProductModel,
- ProductRemark = record.ProductRemark,
- QualityResult = "成功",
- ProductScanTime = record.ProductScanTime,
- });
- }
-
- });
+ ListItems.Insert(0, new TempInfo()
+ {
+ No = ListItems.Count + 1,
+ ProductOrderNo = record.ProductOrderNo,
+ ProductSNCode = record.ProductSNCode,
+ ProductModel = record.ProductModel,
+ ProductRemark = record.ProductRemark,
+ QualityResult = "成功",
+ ProductScanTime = record.ProductScanTime,
+ });
+ }
+
+ });
+ return list;
+ }
+ catch (Exception ex)
+ {
+ log.Error("首页LoadData()方法异常:" + ex.Message.ToString());
+ return null;
+ }
}
public void AddDataGrid()
@@ -589,7 +596,7 @@ namespace Aucma.Core.ProductOffLine.ViewModels
if (list == null || list.Count <= 0) return;
OffLineInfo record = list.OrderByDescending(x => x.ProductScanTime).FirstOrDefault();
//OffLineInfo record = _offLineInfoServices.FirstAsync(x=>x.ProductScanTime).Result;
- if(record.ProductSNCode!= ListItems[0].ProductSNCode && record.ProductSNCode != ListItems[1].ProductSNCode)
+ if (record.ProductSNCode != ListItems[0].ProductSNCode && record.ProductSNCode != ListItems[1].ProductSNCode)
{
Application.Current.Dispatcher.Invoke(() =>
{
@@ -606,7 +613,7 @@ namespace Aucma.Core.ProductOffLine.ViewModels
});
}
-
+
}
diff --git a/Aucma.Core.ProductOffLine/ViewModels/LoginViewModel.cs b/Aucma.Core.ProductOffLine/ViewModels/LoginViewModel.cs
new file mode 100644
index 00000000..00938655
--- /dev/null
+++ b/Aucma.Core.ProductOffLine/ViewModels/LoginViewModel.cs
@@ -0,0 +1,118 @@
+using Admin.Core.IService;
+using Admin.Core.Model;
+using Admin.Core.Service;
+using Aucma.Core.ProductOffLine.Config;
+using Aucma.Core.ProductOffLine.Models;
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Aucma.Core.ProductOffLine.ViewModels
+{
+ public partial class LoginViewModel : ObservableObject
+ {
+ private AppConfig appConfig = AppConfig.Instance;
+
+ public RelayCommand