@ -33,6 +33,7 @@ using ATC_MaterialBind.Entity;
using System.Data ;
using System.Dynamic ;
using System.Drawing ;
using static System . Windows . Forms . VisualStyles . VisualStyleElement . TaskbarClock ;
#region << 版 本 注 释 >>
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -72,11 +73,14 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
private IStationQualityInfoService _stationQualityInfoService ;
private IT_SY_TraceStateService _syTraceStateService ;
private IT_RP_ProductChangeInfoService _ProductChangeInfoService ;
private IT_RP_StationMaterialInventoryService _stationMaterialInventoryService ;
private IT_RP_InventoryConsume_RecordService _inventoryConsumeRecordService ;
public Action < List < StationQualityInfo > > _Action ;
private TaskInfo1 taskInfo ;
private AppsettingsConfig _appSettings = new AppsettingsConfig ( ) ;
private string WritePLCAddress = "D6000" ;
private String _lastCode = string . Empty ;
private int stationid = 3 ;
public IndexContentViewModel ( )
{
taskInfo = new TaskInfo1 ( ) ;
@ -88,6 +92,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
_stationQualityInfoService = App . ServiceProvider . GetService < IStationQualityInfoService > ( ) ;
_syTraceStateService = App . ServiceProvider . GetService < IT_SY_TraceStateService > ( ) ;
_ProductChangeInfoService = App . ServiceProvider . GetService < IT_RP_ProductChangeInfoService > ( ) ;
_stationMaterialInventoryService = App . ServiceProvider . GetService < IT_RP_StationMaterialInventoryService > ( ) ;
_inventoryConsumeRecordService = App . ServiceProvider . GetService < IT_RP_InventoryConsume_RecordService > ( ) ;
_controlOffLineScanHelper = ControlOffLineScanHelper . Instance ;
_controlOffLineScanHelper . InstanceSerialPort ( _appConfig . ComPort ) ;
StationCode = _appConfig . StationCode ;
@ -170,25 +176,30 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
//Products = new List<TaskInfo1> { new TaskInfo1 { TaskNo = "Some product", KBarCode = "Very cool product",QBarCode = "1",Station1 = "1", Station2 = "1", Station3 = "1", Station4 = "1", Station5 = "1", Station6 = "1" } };
if ( StationCode = = "80_3" )
{
stationid = 11 ;
ColumnConfig = new ColumnConfig { Columns = new List < Column > { new Column { Header = "任务编号" , DataField = "TaskNo" } , new Column { Header = "壳体条码" , DataField = "KBarCode" } , new Column { Header = "前盖条码" , DataField = "QBarCode" } , new Column { Header = "前盖轴封" , DataField = "Station1" } , new Column { Header = "曲轴压入转子" , DataField = "Station2" } , new Column { Header = "曲轴压入前盖" , DataField = "Station3" } , new Column { Header = "电机壳压轴承" , DataField = "Station4" } , new Column { Header = "前盖轴封检漏" , DataField = "Station5" } , new Column { Header = "转子充磁" , DataField = "Station6" } , new Column { Header = "记录时间" , DataField = "RecordTime" } } } ;
}
else if ( StationCode = = "20_2" )
{
stationid = 3 ;
WritePLCAddress = "D6002" ;
ColumnConfig = new ColumnConfig { Columns = new List < Column > { new Column { Header = "任务编号" , DataField = "TaskNo" } , new Column { Header = "壳体条码" , DataField = "KBarCode" } , new Column { Header = "控制器条码" , DataField = "QBarCode" } , new Column { Header = "电机壳组件绝缘测试" , DataField = "Station1" } , new Column { Header = "记录时间" , DataField = "RecordTime" } } } ;
}
else if ( StationCode = = "200" )
{
stationid = 24 ;
ColumnConfig = new ColumnConfig { Columns = new List < Column > { new Column { Header = "任务编号" , DataField = "TaskNo" } , new Column { Header = "壳体条码" , DataField = "KBarCode" } , new Column { Header = "控制器条码" , DataField = "QBarCode" } , new Column { Header = "记录时间" , DataField = "RecordTime" } } } ;
}
else if ( StationCode = = "120_2" )
{
stationid = 17 ;
ColumnConfig = new ColumnConfig { Columns = new List < Column > { new Column { Header = "任务编号" , DataField = "TaskNo" } , new Column { Header = "壳体条码" , DataField = "KBarCode" } , new Column { Header = "静盘条码" , DataField = "QBarCode" } , new Column { Header = "静盘排气阀片安装" , DataField = "Station1" } , new Column { Header = "静盘反向气密性检测" , DataField = "Station2" } , new Column { Header = "动静盘高度差测量" , DataField = "Station3" } , new Column { Header = "动静盘BP环选配" , DataField = "Station4" } , new Column { Header = "动静盘拍照" , DataField = "Station5" } , new Column { Header = "记录时间" , DataField = "RecordTime" } } } ;
}
else if ( StationCode = = "150" )
{
stationid = 19 ;
ColumnConfig = new ColumnConfig { Columns = new List < Column > { new Column { Header = "任务编号" , DataField = "TaskNo" } , new Column { Header = "壳体条码" , DataField = "KBarCode" } , new Column { Header = "后盖条码" , DataField = "QBarCode" } , new Column { Header = "静盘背面和机壳端面高度测量" , DataField = "Station1" } , new Column { Header = "记录时间" , DataField = "RecordTime" } } } ;
}
@ -323,6 +334,13 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
return ;
}
}
var flag5 = IsExistBarCodeRelationShip ( BarCode , "1" ) ;
if ( flag5 )
{
RefreshLogMessage ( BarCode + "已存在扫描绑定记录,不允许重复扫描!" ) ;
ClearText ( "全部" ) ;
return ;
}
KBarCode = true ;
KTBoxCode = BarCode ;
KTBoxTime = DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss" ) ;
@ -477,6 +495,148 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
}
private bool JudgeBatchCount ( List < T_RP_StationMaterialInventory > t_RP_StationMaterialInventories )
{
bool iflag = false ;
try
{
foreach ( T_RP_StationMaterialInventory t_RP in t_RP_StationMaterialInventories )
{
T_RP_StationMaterialInventory t_RP_StationMaterialInventory = new T_RP_StationMaterialInventory ( ) ;
t_RP_StationMaterialInventory = GetBatchNo ( t_RP . materialTypeId ) ;
int count = int . Parse ( t_RP . remark ) ;
int batchcount = t_RP_StationMaterialInventory . inputcount - count ;
if ( batchcount < 0 )
{
RefreshLogMessage ( t_RP . materialTypeId + "物料库存不足,请及时维护!" ) ;
iflag = true ;
return iflag ;
}
}
return iflag ;
}
catch ( Exception ex )
{
return iflag ;
}
}
private async void AddInventoryConsume_Record ( )
{
try
{
List < T_RP_StationMaterialInventory > t_RP_StationMaterialInventories = null ;
t_RP_StationMaterialInventories = GetMaterialInventoryCount ( ) ;
if ( t_RP_StationMaterialInventories ! = null )
{
if ( t_RP_StationMaterialInventories . Count > 0 )
{
bool icountflag = JudgeBatchCount ( t_RP_StationMaterialInventories ) ;
if ( icountflag )
{
return ;
}
foreach ( T_RP_StationMaterialInventory t_RP in t_RP_StationMaterialInventories )
{
T_RP_StationMaterialInventory t_RP_StationMaterialInventory = new T_RP_StationMaterialInventory ( ) ;
t_RP_StationMaterialInventory = GetBatchNo ( t_RP . materialTypeId ) ;
//判断批次库存是否满足扣料
if ( t_RP_StationMaterialInventory ! = null )
{
bool iflag = await RealtimeInventoryDeduction ( t_RP_StationMaterialInventory , t_RP . remark ) ;
if ( iflag )
{
//存库
T_RP_InventoryConsume_Record t_RP_InventoryConsume_Record = new T_RP_InventoryConsume_Record ( ) ;
t_RP_InventoryConsume_Record . materialtypeid = t_RP . materialTypeId ;
t_RP_InventoryConsume_Record . batchno = t_RP_StationMaterialInventory . batchno ;
t_RP_InventoryConsume_Record . consumecount = t_RP . remark ;
t_RP_InventoryConsume_Record . stationid = stationid ;
t_RP_InventoryConsume_Record . createTime = DateTime . Now ;
_inventoryConsumeRecordService . InsertAsync ( t_RP_InventoryConsume_Record ) ;
}
}
else
{
RefreshLogMessage ( t_RP . materialTypeId + "物料库存不足,请及时维护!" ) ;
return ;
}
}
}
}
}
catch ( Exception ex )
{
_logger . LogError ( $"异常:{ex.Message}" ) ;
}
}
/// <summary>
/// 获取工位物料构成
/// </summary>
private List < T_RP_StationMaterialInventory > GetMaterialInventoryCount ( )
{
List < T_RP_StationMaterialInventory > t_RP_StationMaterialInventories = null ;
try
{
t_RP_StationMaterialInventories = _stationMaterialInventoryService . GetMaterialShip ( stationid ) ;
return t_RP_StationMaterialInventories ;
}
catch ( Exception ex )
{
_logger . LogError ( $"异常:{ex.Message}" ) ;
return t_RP_StationMaterialInventories ;
}
}
private T_RP_StationMaterialInventory GetBatchNo ( string materialTypeId )
{
T_RP_StationMaterialInventory t_RP_StationMaterialInventory = null ;
try
{
t_RP_StationMaterialInventory = _stationMaterialInventoryService . GetBatchNoByMaterialTypeID ( materialTypeId , stationid ) ;
return t_RP_StationMaterialInventory ;
}
catch ( Exception ex )
{
_logger . LogError ( $"异常:{ex.Message}" ) ;
return t_RP_StationMaterialInventory ;
}
}
private async Task < bool > RealtimeInventoryDeduction ( T_RP_StationMaterialInventory t_RP_StationMaterialInventory , string count )
{
bool iFlag = false ;
try
{
int icount = int . Parse ( count ) ;
if ( t_RP_StationMaterialInventory . inputcount > 0 )
{
t_RP_StationMaterialInventory . inputcount = t_RP_StationMaterialInventory . inputcount - icount ;
t_RP_StationMaterialInventory . updateTime = DateTime . Now ;
iFlag = await _stationMaterialInventoryService . UpdateAsync ( t_RP_StationMaterialInventory ) ;
return iFlag ;
}
else
{
//库存不足提示
return iFlag ;
}
}
catch ( Exception ex )
{
_logger . LogError ( $"异常:{ex.Message}" ) ;
return iFlag ;
}
}
private async void ZJBusiness ( string BarCode )
{
try
@ -518,7 +678,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
var flag = stationQualityInfos . FindAll ( x = > x . State ! = "1" ) ;
if ( flag ! = null & & flag . Count ! = 0 )
{
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress );
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress ,2 );
_Action ? . Invoke ( stationQualityInfos ) ;
KBarCode = false ;
QBarCode = false ;
@ -537,6 +697,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RefreshDataGrid ( taskInfo ) ;
MaterialBing ( KTBoxCode , ZJBoxCode ) ;
AddProductCount ( "OK" ) ;
AddInventoryConsume_Record ( ) ;
//_Action?.Invoke(null);
}
@ -554,6 +716,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RefreshDataGrid ( taskInfo ) ;
MaterialBing ( KTBoxCode , ZJBoxCode ) ;
AddProductCount ( "OK" ) ;
AddInventoryConsume_Record ( ) ;
//_Action?.Invoke(null);
}
@ -582,7 +745,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
taskInfo . QBarCode = ZJBoxCode ;
taskInfo . KBarCode = KTBoxCode ;
RefreshDataGrid ( taskInfo ) ;
UpdateTrace ( KTBoxCode , ZJBoxCode ) ;
UpdateTrace ( KTBoxCode , ZJBoxCode ) ;
AddInventoryConsume_Record ( ) ;
}
}
@ -602,11 +766,13 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
if ( StationCode = = "150" )
{
HCode_Bind ( barcode ) ;
return ;
}
if ( StationCode = = "20_2" )
{
//控制器互锁
KCode_Bind ( barcode ) ;
return ;
}
else
{
@ -627,7 +793,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
var flag = stationQualityInfos . FindAll ( x = > x . State ! = "1" ) ;
if ( flag ! = null & & flag . Count ! = 0 )
{
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress );
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress ,2 );
_Action ? . Invoke ( stationQualityInfos ) ;
KBarCode = false ;
QBarCode = false ;
@ -645,7 +811,11 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RefreshDataGrid ( taskInfo ) ;
MaterialBing ( KTBoxCode , ZJBoxCode ) ;
AddProductCount ( "OK" ) ;
AddInventoryConsume_Record ( ) ;
//_Action?.Invoke(null);
return ;
}
}
@ -661,7 +831,11 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RefreshDataGrid ( taskInfo ) ;
MaterialBing ( KTBoxCode , ZJBoxCode ) ;
AddProductCount ( "OK" ) ;
AddInventoryConsume_Record ( ) ;
//_Action?.Invoke(null);
return ;
}
}
@ -694,6 +868,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
AddProductCount ( "OK" ) ;
var WritePLCFlag = _materialBindBusiness . OK_FXSignal ( WritePLCAddress ) ;
AddInventoryConsume_Record ( ) ;
}
}
@ -729,7 +905,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
var flag = stationQualityInfos . FindAll ( x = > x . State ! = "1" ) ;
if ( flag ! = null & & flag . Count ! = 0 )
{
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress );
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress , 2 );
_Action ? . Invoke ( stationQualityInfos ) ;
KBarCode = false ;
QBarCode = false ;
@ -747,7 +923,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
taskInfo . KBarCode = KTBoxCode ;
RefreshDataGrid ( taskInfo ) ;
MaterialBing ( KTBoxCode , ZJBoxCode ) ;
AddInventoryConsume_Record ( ) ;
}
}
}
@ -762,6 +938,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RefreshDataGrid ( taskInfo ) ;
MaterialBing ( KTBoxCode , ZJBoxCode ) ;
AddProductCount ( "OK" ) ;
AddInventoryConsume_Record ( ) ;
//_Action?.Invoke(null);
}
@ -797,7 +975,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
var flag = stationQualityInfos . FindAll ( x = > x . State ! = "1" ) ;
if ( flag ! = null & & flag . Count ! = 0 )
{
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress );
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress ,2 );
_Action ? . Invoke ( stationQualityInfos ) ;
KBarCode = false ;
QBarCode = false ;
@ -815,6 +993,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
taskInfo . KBarCode = KTBoxCode ;
RefreshDataGrid ( taskInfo ) ;
UpdateTrace ( KTBoxCode , ZJBoxCode ) ;
AddInventoryConsume_Record ( ) ;
}
}
@ -830,6 +1009,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RefreshDataGrid ( taskInfo ) ;
UpdateTrace ( KTBoxCode , ZJBoxCode ) ;
AddProductCount ( "OK" ) ;
AddInventoryConsume_Record ( ) ;
//_Action?.Invoke(null);
}
@ -1052,6 +1233,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
var Writeflag = _materialBindBusiness . OK_FXSignal ( WritePLCAddress ) ;
AddInventoryConsume_Record ( ) ;
//ClearText();
}
}
@ -1097,7 +1280,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
var flag = stationQualityInfos . FindAll ( x = > x . State ! = "1" ) ;
if ( flag ! = null & & flag . Count ! = 0 )
{
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress );
var Writeflag = _materialBindBusiness . NG_BJSignal ( WritePLCAddress , 2 );
_Action ? . Invoke ( stationQualityInfos ) ;
ClearText ( "全部" ) ;
AddProductCount ( "NG" ) ;
@ -1113,6 +1296,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
taskInfo . KBarCode = KTBoxCode ;
RefreshDataGrid ( taskInfo ) ;
UpdateTrace ( KTBoxCode , ZJBoxCode ) ;
AddInventoryConsume_Record ( ) ;
}
}
@ -1128,6 +1313,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RefreshDataGrid ( taskInfo ) ;
UpdateTrace ( KTBoxCode , ZJBoxCode ) ;
AddProductCount ( "OK" ) ;
AddInventoryConsume_Record ( ) ;
//_Action?.Invoke(null);
}
@ -1238,6 +1425,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
await App . Current . Dispatcher . BeginInvoke ( ( Action ) ( ( ) = >
{
taskInfo . RecordTime = DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss" ) ;
TaskInfoDataGrid . OrderBy ( x = > x . RecordTime ) ;
TaskInfoDataGrid . Add ( taskInfo ) ;
} ) ) ;