Compare commits

...

11 Commits

@ -106,6 +106,7 @@ namespace SlnMesnac.Business.business
/// </summary> /// </summary>
public void InsertPlanExecuteUser(ProdPLanInfo prodPlanInfo,ProdPlanDetail prodPlanDetail,List<RecordStaffRealTime> realTimes) public void InsertPlanExecuteUser(ProdPLanInfo prodPlanInfo,ProdPlanDetail prodPlanDetail,List<RecordStaffRealTime> realTimes)
{ {
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
foreach (var item in realTimes) foreach (var item in realTimes)
{ {
ProdPlanExecuteUser prodPlanExecuteUser = new ProdPlanExecuteUser() ProdPlanExecuteUser prodPlanExecuteUser = new ProdPlanExecuteUser()
@ -119,10 +120,10 @@ namespace SlnMesnac.Business.business
PlanBeginDate = prodPlanDetail.BeginTime, PlanBeginDate = prodPlanDetail.BeginTime,
PlanEndDate = prodPlanDetail.EndTime, PlanEndDate = prodPlanDetail.EndTime,
CreatedBy = prodPlanInfo.CreatedBy, CreatedBy = prodPlanInfo.CreatedBy,
CreatedTime = prodPlanDetail.BeginTime, CreatedTime = time,
UpdatedBy = prodPlanInfo.UpdatedBy, UpdatedBy = prodPlanInfo.UpdatedBy,
UpdatedTime = prodPlanInfo.UpdatedTime, UpdatedTime = prodPlanInfo.UpdatedTime,
BatchNumber = prodPlanDetail.BatchNumber BatchNumber = prodPlanDetail.BatchNumber,
}; };
_prodPlanExecuteUserService.Insert(prodPlanExecuteUser); _prodPlanExecuteUserService.Insert(prodPlanExecuteUser);
} }
@ -130,12 +131,12 @@ namespace SlnMesnac.Business.business
} }
/// <summary> /// <summary>
/// 查询所有工单执行人员信息 /// 查询某工位所有工单执行人员信息
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public List<RecordStaffRealTime> GetRecordStaffRealTimes() public List<RecordStaffRealTime> GetRecordStaffRealTimes(string stationCode)
{ {
var list = _recordStaffRealTimeService.Query(); var list = _recordStaffRealTimeService.Query().Where(x => x.StationCode == stationCode).ToList();
return list; return list;
} }
@ -177,6 +178,34 @@ namespace SlnMesnac.Business.business
} }
} }
/// <summary>
/// 获取班长
/// </summary>
/// <param name="stationCode"></param>
/// <returns></returns>
public MonitorInfo GetMonitor(string stationCode)
{
MonitorInfo monitorInfo = new MonitorInfo();
monitorInfo = _recordStaffRealTimeService.GetMonitorInfo(stationCode);
return monitorInfo;
}
/// <summary>
/// 获取最后一条明细的结束时间
/// </summary>
public ProdPlanDetail GetLastDetailEndTime(string planCode)
{
ProdPlanDetail prodPlanDetail = new ProdPlanDetail();
prodPlanDetail = _prodPlanDetailService.GetLastPlanDetailByPlanCode(planCode);
return prodPlanDetail;
}
///// <summary>
///// 设置员工下班时间
///// </summary>
//public void SetOffWorkTime(string staffId,string dateTime)
//{
// _prodPlanExecuteUserService.SetExecuterOffWorkTime(staffId, dateTime);
//}
///// <summary> ///// <summary>
///// 查询所有计划工位 ///// 查询所有计划工位
///// </summary> ///// </summary>

@ -21,6 +21,7 @@ namespace SlnMesnac.Business.business
private IRecordStaffAttendanceService _recordStaffAttendanceService; private IRecordStaffAttendanceService _recordStaffAttendanceService;
private IRecordStaffCommuteService _recordStaffCommuteService; private IRecordStaffCommuteService _recordStaffCommuteService;
private IRecordStaffRealTimeService _recordStaffRealTimeService; private IRecordStaffRealTimeService _recordStaffRealTimeService;
private ProdPlanExecuteUserService _prodPlanExecuteUserService;
private string currentTime; private string currentTime;
private string teamMembers = null; private string teamMembers = null;
private List<string> members = new List<string>(); private List<string> members = new List<string>();
@ -29,11 +30,15 @@ namespace SlnMesnac.Business.business
public static string staffId = ""; public static string staffId = "";
public static string theNewAmount = ""; public static string theNewAmount = "";
public RfidHandleBusniess(IRecordStaffAttendanceService recordStaffAttendanceService, IRecordStaffCommuteService recordStaffCommuteService, IRecordStaffRealTimeService recordStaffRealTimeService) public RfidHandleBusniess(IRecordStaffAttendanceService recordStaffAttendanceService,
IRecordStaffCommuteService recordStaffCommuteService,
IRecordStaffRealTimeService recordStaffRealTimeService,
ProdPlanExecuteUserService prodPlanExecuteUserService)
{ {
this._recordStaffAttendanceService = recordStaffAttendanceService; this._recordStaffAttendanceService = recordStaffAttendanceService;
this._recordStaffCommuteService = recordStaffCommuteService; this._recordStaffCommuteService = recordStaffCommuteService;
this._recordStaffRealTimeService = recordStaffRealTimeService; this._recordStaffRealTimeService = recordStaffRealTimeService;
_prodPlanExecuteUserService = prodPlanExecuteUserService;
} }
@ -96,7 +101,8 @@ namespace SlnMesnac.Business.business
StartWorkTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), StartWorkTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
Remark = staff.Remark, Remark = staff.Remark,
CreateBy = staff.StaffName, CreateBy = staff.StaffName,
CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
StationCode = stationCode
}; };
_recordStaffCommuteService.Insert(recordStaffCommute); _recordStaffCommuteService.Insert(recordStaffCommute);
} }
@ -169,9 +175,18 @@ namespace SlnMesnac.Business.business
&& recordStaffRealTime.StationCode == stationCode && recordStaffRealTime.StationCode == stationCode
&& recordStaffRealTime.AttendanceType == "0").FirstOrDefault(); && recordStaffRealTime.AttendanceType == "0").FirstOrDefault();
_recordStaffRealTimeService.Delete(realTime); _recordStaffRealTimeService.Delete(realTime);
SetOffWorkTime(staff.StaffId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
} }
} }
return _recordStaffRealTimeService.GetRecordStaffRealTime(stationCode); return _recordStaffRealTimeService.GetRecordStaffRealTime(stationCode);
} }
/// <summary>
/// 设置员工下班时间
/// </summary>
public void SetOffWorkTime(string staffId, string dateTime)
{
_prodPlanExecuteUserService.SetExecuterOffWorkTime(staffId, dateTime);
}
} }
} }

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.domain
{
public class MonitorInfo
{
/// <summary>
///
/// </summary>
public string stationCode { get; set; }
/// <summary>
/// 员工Id
/// </summary>
public string staffId { get; set; }
/// <summary>
/// 员工名
/// </summary>
public string staffName { get; set; }
/// <summary>
/// 员工类型
/// </summary>
public string staffType { get; set; }
}
}

@ -147,5 +147,11 @@ namespace SlnMesnac.Model.domain
/// </summary> /// </summary>
[SugarColumn(ColumnName = "import_flag")] [SugarColumn(ColumnName = "import_flag")]
public string ImportFlag { get; set; } public string ImportFlag { get; set; }
/// <summary>
/// 工时
/// </summary>
[SugarColumn(IsIgnore = true)]
public string WorkingHours { get; set; }
} }
} }

@ -0,0 +1,16 @@
using SqlSugar;
using System;
namespace SlnMesnac.Model.domain
{
[SugarTable("prod_plan_erp_info"), TenantAttribute("mes")]
public class ProdPlanErpInfo
{
[SugarColumn(ColumnName = "obj_id", IsPrimaryKey = true, IsIdentity = true)]
public long ObjId { get; set; } // obj_id
[SugarColumn(ColumnName = "seqNo")]
public string SeqNo { get; set; } // seqNo
[SugarColumn(ColumnName = "workingHours")]
public string WorkingHours { get; set; } // workingHours
}
}

@ -93,5 +93,11 @@ namespace SlnMesnac.Model.domain
/// </summary> /// </summary>
[SugarColumn(ColumnName = "batch_number")] [SugarColumn(ColumnName = "batch_number")]
public int BatchNumber { get; set; } public int BatchNumber { get; set; }
/// <summary>
/// 下班时间
/// </summary>
[SugarColumn(ColumnName = "off_work_time")]
public string OffWorkTime { get; set; }
} }
} }

@ -94,5 +94,11 @@ namespace SlnMesnac.Model.domain
/// </summary> /// </summary>
[SugarColumn(ColumnName = "machine_code")] [SugarColumn(ColumnName = "machine_code")]
public string MachineCode { get; set; } public string MachineCode { get; set; }
/// <summary>
/// 工位编号
/// </summary>
[SugarColumn(ColumnName = "station_code")]
public string StationCode { get; set; }
} }
} }

@ -8,6 +8,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.170" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -14,5 +14,12 @@ namespace SlnMesnac.Repository.service
/// <param name="stationCode"></param> /// <param name="stationCode"></param>
/// <returns></returns> /// <returns></returns>
List<RecordStaffRealTime> GetRecordStaffRealTime(string stationCode); List<RecordStaffRealTime> GetRecordStaffRealTime(string stationCode);
/// <summary>
/// 获取班长信息
/// </summary>
/// <param name="stationCode"></param>
/// <returns></returns>
MonitorInfo GetMonitorInfo(string stationCode);
} }
} }

@ -48,6 +48,11 @@ namespace SlnMesnac.Repository.service.Impl
return staffInfo; return staffInfo;
} }
/// <summary>
/// 通过员工Id查询名
/// </summary>
/// <param name="staffId"></param>
/// <returns></returns>
public BaseStaffInfo GetStaffInfoByStaffId(string staffId) public BaseStaffInfo GetStaffInfoByStaffId(string staffId)
{ {
BaseStaffInfo staffInfo = null; BaseStaffInfo staffInfo = null;

@ -49,18 +49,42 @@ namespace SlnMesnac.Repository.service.Impl
public List<ProdPlanDetail> GetPlanDetailsByPlanCode(string planCode) public List<ProdPlanDetail> GetPlanDetailsByPlanCode(string planCode)
{ {
List<ProdPlanDetail> prodPlanDetails = _rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(planCode),x=>x.PlanCode == planCode).OrderByDescending(x => x.ObjId).ToList(); List<ProdPlanDetail> prodPlanDetails = new List<ProdPlanDetail>();
try
{
prodPlanDetails = _rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(planCode), x => x.PlanCode == planCode).OrderByDescending(x => x.ObjId).ToList();
}
catch (Exception ex)
{
_logger.LogError($"查询对应计划的所有明细异常:{ex.Message}");
throw;
}
return prodPlanDetails; return prodPlanDetails;
} }
public ProdPlanDetail GetLastPlanDetailByPlanCode(string planCode)
{
ProdPlanDetail prodPlanDetail = new ProdPlanDetail();
try
{
prodPlanDetail = _rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(planCode), x => x.PlanCode == planCode).OrderByDescending(x => x.EndTime).First();
}
catch (Exception ex)
{
_logger.LogError($"查询对应计划的最新一条明细异常:{ex.Message}");
throw;
}
return prodPlanDetail;
}
public bool DeleteByPlanCodeBatchNumber(string planCode, int number) public bool DeleteByPlanCodeBatchNumber(string planCode, int number)
{ {
bool result = false; bool result = false;
try try
{ {
//_rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(planCode), x => x.PlanCode == planCode && x.BatchNumber == number).OrderByDescending(x => x.ObjId).First(); //_rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(planCode), x => x.PlanCode == planCode && x.BatchNumber == number).OrderByDescending(x => x.ObjId).First();
ProdPlanDetail temp = _rep.AsQueryable().Where(x => x.PlanCode == planCode && x.BatchNumber == number).OrderByDescending(x => x.ObjId).First(); List<ProdPlanDetail> tempList = _rep.AsQueryable().Where(x => x.PlanCode == planCode && x.BatchNumber == number).OrderByDescending(x => x.ObjId).ToList();
result = _rep.Delete(temp); result = _rep.Delete(tempList);
} }
catch (Exception ex) catch (Exception ex)
{ {

@ -39,5 +39,25 @@ namespace SlnMesnac.Repository.service.Impl
} }
return result; return result;
} }
/// <summary>
/// 设置员工下班时间
/// </summary>
public int SetExecuterOffWorkTime(string staffId,string dateTime)
{
int executers = 0;
try
{
executers = _rep.Context.Updateable<ProdPlanExecuteUser>()
.SetColumns(x => x.OffWorkTime == dateTime)
.Where(x => x.OffWorkTime == null && x.StaffId == staffId)
.ExecuteCommand();
}
catch (Exception ex)
{
_logger.LogError($"设置员工下班时间异常:{ex.Message}");
}
return executers;
}
} }
} }

@ -28,14 +28,41 @@ namespace SlnMesnac.Repository.service.Impl
/// <returns></returns> /// <returns></returns>
public List<ProdPLanInfo> GetRecordStaffAttendancesByConditions(string? orderCode, string? planCode, string? materialCode, string? stationCode, string? planStatus) public List<ProdPLanInfo> GetRecordStaffAttendancesByConditions(string? orderCode, string? planCode, string? materialCode, string? stationCode, string? planStatus)
{ {
List<ProdPLanInfo> recordStaffAttendances = new List<ProdPLanInfo>(); var query = _rep.Context.Queryable<ProdPLanInfo>()
List<ProdPLanInfo> planInfoList = _rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(orderCode), x => x.OrderCode == orderCode) .LeftJoin<ProdPlanErpInfo>((ppi, ppei) => ppi.PlanCode == ppei.SeqNo)
.WhereIF(!string.IsNullOrEmpty(planCode), x => x.PlanCode == planCode) .WhereIF(!string.IsNullOrEmpty(orderCode), (ppi, ppei) => ppi.OrderCode == orderCode)
.WhereIF(!string.IsNullOrEmpty(materialCode), x => x.MaterialCode == materialCode) .WhereIF(!string.IsNullOrEmpty(planCode), (ppi, ppei) => ppi.PlanCode == planCode)
.WhereIF(!string.IsNullOrEmpty(stationCode), x => x.StationCode == stationCode) .WhereIF(!string.IsNullOrEmpty(materialCode), (ppi, ppei) => ppi.MaterialCode == materialCode)
.WhereIF(!string.IsNullOrEmpty(planStatus), x => x.PlanStatus == planStatus || x.PlanStatus == "4") .WhereIF(!string.IsNullOrEmpty(stationCode), (ppi, ppei) => ppi.StationCode == stationCode)
.OrderByDescending(x => x.ObjId) .WhereIF(!string.IsNullOrEmpty(planStatus), (ppi, ppei) => ppi.PlanStatus == planStatus || ppi.PlanStatus == "4")
.ToList(); .Select((ppi, ppei) => new ProdPLanInfo
{
ObjId = ppi.ObjId,
PlanCode = ppi.PlanCode,
OrderCode = ppi.OrderCode,
MaterialCode = ppi.MaterialCode,
MaterialName = ppi.MaterialName,
StationCode = ppi.StationCode,
TeamCode = ppi.TeamCode,
PlanAmount = ppi.PlanAmount,
CompleteAmount = ppi.CompleteAmount,
BeginTime = ppi.BeginTime,
EndTime = ppi.EndTime,
CompFlag = ppi.CompFlag,
CreatedBy = ppi.CreatedBy,
CreatedTime = ppi.CreatedTime,
UpdatedBy = ppi.UpdatedBy,
UpdatedTime = ppi.UpdatedTime,
DeviceCode = ppi.DeviceCode,
PlanBeginTime = ppi.PlanBeginTime,
PlanEndTime = ppi.PlanEndTime,
PlanStatus = ppi.PlanStatus,
Classes = ppi.Classes,
ProcessCode = ppi.ProcessCode,
ImportFlag = ppi.ImportFlag,
WorkingHours = ppei.WorkingHours
});
List<ProdPLanInfo> planInfoList = query.ToList();
return planInfoList; return planInfoList;
} }

@ -37,5 +37,24 @@ namespace SlnMesnac.Repository.service.Impl
} }
return records; return records;
} }
/// <summary>
/// 获取班长信息
/// </summary>
/// <returns></returns>
public MonitorInfo GetMonitorInfo(string stationCode)
{
var monitorInfo = _rep.Context.Queryable<RecordStaffRealTime>()
.LeftJoin<BaseStaffInfo>((srt, si) => srt.StaffId == si.StaffId)
.Where((srt, si) => si.StaffType == "1" && srt.StationCode == stationCode)
.Select((srt, si) => new MonitorInfo
{
stationCode = srt.StationCode,
staffId = si.StaffId,
staffName = si.StaffName,
staffType = si.StaffType
}).First();
return monitorInfo;
}
} }
} }

@ -29,6 +29,13 @@ namespace SlnMesnac.Repository.service
/// <returns></returns> /// <returns></returns>
List<ProdPlanDetail> GetPlanDetailsByPlanCode(string planCode); List<ProdPlanDetail> GetPlanDetailsByPlanCode(string planCode);
/// <summary>
/// 根据计划编号查询最新的一条明细
/// </summary>
/// <param name="planCode"></param>
/// <returns></returns>
ProdPlanDetail GetLastPlanDetailByPlanCode(string planCode);
/// <summary> /// <summary>
/// 根据工单号删除锅数为0的明细 /// 根据工单号删除锅数为0的明细
/// </summary> /// </summary>

@ -15,5 +15,13 @@ namespace SlnMesnac.Repository.service
/// <param name="batch"></param> /// <param name="batch"></param>
/// <returns></returns> /// <returns></returns>
bool DeleteByPlanCodeAndTheBatchNumber(string planCode, int batch); bool DeleteByPlanCodeAndTheBatchNumber(string planCode, int batch);
/// <summary>
///
/// </summary>
/// <param name="staffId"></param>
/// <param name="dateTime"></param>
/// <returns></returns>
int SetExecuterOffWorkTime(string staffId, string dateTime);
} }
} }

@ -157,7 +157,7 @@
RowHeight="35" AutoGenerateColumns="False" RowHeaderWidth="0" RowHeight="35" AutoGenerateColumns="False" RowHeaderWidth="0"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden" GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
BorderThickness="0" CanUserAddRows="False" BorderThickness="0" CanUserAddRows="False"
Foreground="#FFFFFF" SelectedItem="{Binding SelectedDataItem}"> Foreground="#FFFFFF" >
<!--resourceStyle 399行修改选中字体颜色--> <!--resourceStyle 399行修改选中字体颜色-->
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTemplateColumn Width="55" Header="序号" > <DataGridTemplateColumn Width="55" Header="序号" >

@ -71,7 +71,7 @@
</UserControl.Resources> </UserControl.Resources>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="7*"/> <ColumnDefinition Width="6*"/>
<ColumnDefinition Width="4*"/> <ColumnDefinition Width="4*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Border Grid.Column="0" > <Border Grid.Column="0" >
@ -109,19 +109,19 @@
<TextBlock Text="ERP订单编号" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/> <TextBlock Text="ERP订单编号" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border> </Border>
<Border Grid.Row="0" Grid.Column="1"> <Border Grid.Row="0" Grid.Column="1">
<TextBox Text="{Binding OrderCodeTextBox}" Height="30" Width="180" FontSize="15" Foreground="White" HorizontalAlignment="Left"/> <TextBox Text="{Binding OrderCodeTextBox}" Height="30" Width="170" FontSize="15" Foreground="White" HorizontalAlignment="Left"/>
</Border> </Border>
<Border Grid.Row="0" Grid.Column="2"> <Border Grid.Row="0" Grid.Column="2">
<TextBlock Text="工单编号" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/> <TextBlock Text="工单编号" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border> </Border>
<Border Grid.Row="0" Grid.Column="3"> <Border Grid.Row="0" Grid.Column="3">
<TextBox Text="{Binding PlanCodeTextBox}" Height="30" Width="180" FontSize="15" Foreground="White" HorizontalAlignment="Left"/> <TextBox Text="{Binding PlanCodeTextBox}" Height="30" Width="170" FontSize="15" Foreground="White" HorizontalAlignment="Left"/>
</Border> </Border>
<Border Grid.Row="0" Grid.Column="4"> <Border Grid.Row="0" Grid.Column="4">
<TextBlock Text="物料名称" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/> <TextBlock Text="物料名称" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border> </Border>
<Border Grid.Row="0" Grid.Column="5"> <Border Grid.Row="0" Grid.Column="5">
<TextBox Text="{Binding MaterialNameTextBox}" Height="30" Width="180" FontSize="15" Foreground="White" HorizontalAlignment="Left"/> <TextBox Text="{Binding MaterialNameTextBox}" Height="30" Width="170" FontSize="15" Foreground="White" HorizontalAlignment="Left"/>
</Border> </Border>
<Border Grid.Row="1" Grid.Column="0"> <Border Grid.Row="1" Grid.Column="0">
<TextBlock Text="工位:" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/> <TextBlock Text="工位:" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
@ -338,11 +338,11 @@
</Grid> </Grid>
</Border> </Border>
<Border Grid.Row="3"> <Border Grid.Row="3">
<DataGrid Name="dataGridPlanDetail" ItemsSource="{Binding ProdPLanDetailDataGrid}" Background="Transparent" <DataGrid Name="dataGridPlanDetail" ItemsSource="{Binding ProdPLanDetailDataGrid,Mode=TwoWay}" Background="Transparent"
FontSize="15" ColumnHeaderHeight="30" LoadingRow="dgvMH_LoadingRow" FontSize="15" ColumnHeaderHeight="30" LoadingRow="dgvMH_LoadingRow"
RowHeight="40" AutoGenerateColumns="False" RowHeaderWidth="0" RowHeight="40" AutoGenerateColumns="False" RowHeaderWidth="0"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden" GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Hidden" BorderThickness="0" CanUserAddRows="False" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False"
Foreground="#FFFFFF" SelectedItem="{Binding SelectedDetailRow}"> Foreground="#FFFFFF" SelectedItem="{Binding SelectedDetailRow}">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTemplateColumn Width="55" Header="序号" > <DataGridTemplateColumn Width="55" Header="序号" >
@ -353,8 +353,9 @@
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding PlanAmount}" Header="计划数量" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding PlanAmount}" Header="计划数量" Width="1*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding CompleteAmount}" Header="新增数量" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding CompleteAmount}" Header="新增数量" Width="1*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding CreatedBy}" Header="当前班长" Width="1*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding BeginTime, StringFormat=\{0:yyy-MM-dd HH:mm:ss\}}" Header="实际开始时间" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/> <DataGridTextColumn Binding="{Binding BeginTime, StringFormat=\{0:yyy-MM-dd HH:mm:ss\}}" Header="实际开始时间" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTemplateColumn Header="操作" Width="1*" > <DataGridTemplateColumn Header="操作" Width="1*" >
@ -363,7 +364,7 @@
<WrapPanel> <WrapPanel>
<Button Content="撤回" <Button Content="撤回"
FontSize="15" FontSize="15"
Width="60" Width="40"
Height="25" Height="25"
Command="{Binding DataContext.WithdrawCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}" Command="{Binding DataContext.WithdrawCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding}"> CommandParameter="{Binding}">

@ -30,6 +30,7 @@ namespace SlnMesnac.WPF.ViewModel
public class EmployeeLoginViewModel : INotifyPropertyChanged public class EmployeeLoginViewModel : INotifyPropertyChanged
{ {
private readonly ILogger<EmployeeLoginViewModel> _logger; private readonly ILogger<EmployeeLoginViewModel> _logger;
private readonly DatabaseHandleBusniess _databaseHandleBusniess;
private readonly RfidHandleBusniess _rfidHandleBusniess; private readonly RfidHandleBusniess _rfidHandleBusniess;
private IBaseStaffService baseStaffService; private IBaseStaffService baseStaffService;
private IRecordStaffAttendanceService _recordStaffAttendanceService; private IRecordStaffAttendanceService _recordStaffAttendanceService;
@ -261,6 +262,7 @@ namespace SlnMesnac.WPF.ViewModel
baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>(); baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>(); _recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
_recordStaffCommuteService = App.ServiceProvider.GetService<IRecordStaffCommuteService>(); _recordStaffCommuteService = App.ServiceProvider.GetService<IRecordStaffCommuteService>();
_databaseHandleBusniess = App.ServiceProvider.GetService<DatabaseHandleBusniess>();
_rfidHandleBusniess = App.ServiceProvider.GetService<RfidHandleBusniess>(); _rfidHandleBusniess = App.ServiceProvider.GetService<RfidHandleBusniess>();
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.SetBasePath(System.AppContext.BaseDirectory) .SetBasePath(System.AppContext.BaseDirectory)
@ -318,7 +320,7 @@ namespace SlnMesnac.WPF.ViewModel
if (RemoveConfirmViewModel.times == 1) if (RemoveConfirmViewModel.times == 1)
{ {
var theUser = baseStaffService.GetStaffInfoByStaffId(staffId); var theUser = baseStaffService.GetStaffInfoByStaffId(staffId);
_rfidHandleBusniess.HandleAndInsertRemove(theUser, 2); _rfidHandleBusniess.HandleAndInsertRemove(theUser, 2);//在打卡记录表里记录强退
var list = _rfidHandleBusniess.HandleAndInsertStaffRealTime(theUser, 2); var list = _rfidHandleBusniess.HandleAndInsertStaffRealTime(theUser, 2);
if (list.Count>=0) if (list.Count>=0)
{ {
@ -366,33 +368,7 @@ namespace SlnMesnac.WPF.ViewModel
RecordStaffAttendance recordStaffAttendance = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(user.StaffId, RfidHandleBusniess.stationCode); RecordStaffAttendance recordStaffAttendance = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(user.StaffId, RfidHandleBusniess.stationCode);
if (recordStaffAttendance != null) if (recordStaffAttendance != null)
{ {
var createTime = recordStaffAttendance.CreateTime; //判断与上次打卡类型是否重复(主要为上班)
var nowTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
TimeSpan timeDiff = DateTime.Parse(nowTime) - DateTime.Parse(createTime);
if (timeDiff.TotalHours >= 10)//
{
if (recordStaffAttendance.AttendanceType == "1") //下班卡
{
if (recordStaffAttendance.AttendanceType == status.ToString() || recordStaffAttendance.AttendanceType == "2")
{
StatusText = "未打上班卡,请联系管理员!";
}
}
else if (recordStaffAttendance.AttendanceType == "0")
{
if (recordStaffAttendance.AttendanceType == status.ToString())
{
StatusText = "未打下班卡,请联系管理员!";
}
}
StaffIdText = user.StaffId;
CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!";
_rfidHandleBusniess.HandleAndInsertStaffAttendance(user, isCheckOn);
ShowStaffAttendances(user, isCheckOn);
_rfidHandleBusniess.HandleStaffCommute(user, isCheckOn);
}
else
{
if (recordStaffAttendance.AttendanceType != status.ToString()) if (recordStaffAttendance.AttendanceType != status.ToString())
{ {
StaffIdText = user.StaffId; StaffIdText = user.StaffId;
@ -405,7 +381,46 @@ namespace SlnMesnac.WPF.ViewModel
{ {
StatusText = "请勿重复打卡!"; StatusText = "请勿重复打卡!";
} }
} //var createTime = recordStaffAttendance.CreateTime;
//var nowTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//TimeSpan timeDiff = DateTime.Parse(nowTime) - DateTime.Parse(createTime);
//if (timeDiff.TotalHours >= 10)//
//{
// if (recordStaffAttendance.AttendanceType == "1") //下班卡
// {
// if (recordStaffAttendance.AttendanceType == status.ToString() || recordStaffAttendance.AttendanceType == "2")
// {
// StatusText = "未打上班卡,请联系管理员!";
// }
// }
// else if (recordStaffAttendance.AttendanceType == "0")
// {
// if (recordStaffAttendance.AttendanceType == status.ToString())
// {
// StatusText = "未打下班卡,请联系管理员!";
// }
// }
// StaffIdText = user.StaffId;
// CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!";
// _rfidHandleBusniess.HandleAndInsertStaffAttendance(user, isCheckOn);
// ShowStaffAttendances(user, isCheckOn);
// _rfidHandleBusniess.HandleStaffCommute(user, isCheckOn);
//}
//else
//{
// if (recordStaffAttendance.AttendanceType != status.ToString())
// {
// StaffIdText = user.StaffId;
// CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!";
// _rfidHandleBusniess.HandleAndInsertStaffAttendance(user, isCheckOn);
// ShowStaffAttendances(user, isCheckOn);
// _rfidHandleBusniess.HandleStaffCommute(user, isCheckOn);
// }
// else
// {
// StatusText = "请勿重复打卡!";
// }
//}
} }
else else
{ {

@ -38,6 +38,7 @@ namespace SlnMesnac.WPF.ViewModel
private RfidHandleBusniess _RfidHandleBusniess; private RfidHandleBusniess _RfidHandleBusniess;
private DatabaseHandleBusniess _databaseHandleBusniess; private DatabaseHandleBusniess _databaseHandleBusniess;
private ProdPlanInfoService _prodPlanInfoService; private ProdPlanInfoService _prodPlanInfoService;
private ProdOrderInfoService _prodOrderInfoService;
private List<ProdPLanInfo> prodPlanInfos; private List<ProdPLanInfo> prodPlanInfos;
private ProdPlanDetailService _prodPlanDetailService; private ProdPlanDetailService _prodPlanDetailService;
private IRecordStaffAttendanceService _recordStaffAttendanceService; private IRecordStaffAttendanceService _recordStaffAttendanceService;
@ -48,7 +49,7 @@ namespace SlnMesnac.WPF.ViewModel
private string ProcessCode; private string ProcessCode;
public static bool isComplete = true; public static bool isComplete = true;
public static string theStartTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//记录每个明细的开始时间 public static string theStartTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//记录每个明细的开始时间
public static string intervalvalTime = "2023-11-11 00:00:00"; //public static string intervalvalTime = "2023-11-11 00:00:00";
public static int stations = 0; public static int stations = 0;
private string theOrderCode = ""; private string theOrderCode = "";
private ProdPLanInfo pLanInfo; private ProdPLanInfo pLanInfo;
@ -57,6 +58,7 @@ namespace SlnMesnac.WPF.ViewModel
private string executeText = "待执行"; private string executeText = "待执行";
private int isSearch = 0; private int isSearch = 0;
public static string lastReportTime; public static string lastReportTime;
private int refreshOrNot = 1;//是否刷新
//public static string batchNums = "";//批次 //public static string batchNums = "";//批次
#region 定义命令 #region 定义命令
@ -95,6 +97,8 @@ namespace SlnMesnac.WPF.ViewModel
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo); public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
public static event RefreshDelegate? RefreshEvent; public static event RefreshDelegate? RefreshEvent;
public static Action ClearOrderCodeAction;
/// <summary> /// <summary>
/// 按钮文字转换事件 /// 按钮文字转换事件
/// </summary> /// </summary>
@ -139,9 +143,16 @@ namespace SlnMesnac.WPF.ViewModel
public string MaterialCodeTextBox public string MaterialCodeTextBox
{ {
get { return materialCodeTextBox; } get { return materialCodeTextBox; }
set { materialCodeTextBox = value; OnPropertyChanged("MaterialNameTextBox"); } set { materialCodeTextBox = value; OnPropertyChanged("MaterialCodeTextBox"); }
} }
//private string materialNameTextBox;
//public string MaterialNameTextBox
//{
// get { return materialNameTextBox; }
// set { materialNameTextBox = value; OnPropertyChanged("MaterialNameTextBox"); }
//}
/// <summary> /// <summary>
/// 工位 /// 工位
/// </summary> /// </summary>
@ -201,7 +212,7 @@ namespace SlnMesnac.WPF.ViewModel
/// <summary> /// <summary>
/// 订单Text /// 订单Text
/// </summary> /// </summary>
private string orderCodeText; private string orderCodeText = string.Empty;
public string OrderCodeText public string OrderCodeText
{ {
get { return orderCodeText; } get { return orderCodeText; }
@ -257,12 +268,24 @@ namespace SlnMesnac.WPF.ViewModel
get { return batchNumbers; } get { return batchNumbers; }
set { batchNumbers = value; OnPropertyChanged("BatchNumbers"); } set { batchNumbers = value; OnPropertyChanged("BatchNumbers"); }
} }
/// <summary>
/// 班长名
/// </summary>
private string currentMonitorName;
public string CurrentMonitorName
{
get { return currentMonitorName; }
set { currentMonitorName = value; OnPropertyChanged("CurrentMonitorName"); }
}
#endregion #endregion
public ExecuteViewModel() public ExecuteViewModel()
{ {
_logger = App.ServiceProvider.GetService<ILogger<ExecuteViewModel>>(); _logger = App.ServiceProvider.GetService<ILogger<ExecuteViewModel>>();
_prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>(); _prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>();
_prodOrderInfoService = App.ServiceProvider.GetService<ProdOrderInfoService>();
_prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>(); _prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>(); _recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
_recordStaffRealTimeService = App.ServiceProvider.GetService<IRecordStaffRealTimeService>(); _recordStaffRealTimeService = App.ServiceProvider.GetService<IRecordStaffRealTimeService>();
@ -289,6 +312,12 @@ namespace SlnMesnac.WPF.ViewModel
{ {
updateStationName(stationName); updateStationName(stationName);
}; };
ProductionReportViewModel.RefrashClearAction += num =>
{
refreshOrNot = num;
Clear();
}
;
DeviceCode = configuration.GetSection("AppConfig")["DeviceCode"]; DeviceCode = configuration.GetSection("AppConfig")["DeviceCode"];
ProcessCode = configuration.GetSection("AppConfig")["ProcessCode"]; ProcessCode = configuration.GetSection("AppConfig")["ProcessCode"];
HandoverCommand = new RelayCommand(Handover); HandoverCommand = new RelayCommand(Handover);
@ -385,7 +414,11 @@ namespace SlnMesnac.WPF.ViewModel
reportWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 让窗体出现在屏幕中央 reportWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 让窗体出现在屏幕中央
reportWin.ShowDialog();//窗体出现后禁止后面的用户控件 reportWin.ShowDialog();//窗体出现后禁止后面的用户控件
Search(); Search();
if (refreshOrNot == 1)
{
Refresh(pLanInfo); Refresh(pLanInfo);
}
refreshOrNot = 1;
ShowTeamMember(); ShowTeamMember();
if (stations >= 3) if (stations >= 3)
{ {
@ -457,21 +490,24 @@ namespace SlnMesnac.WPF.ViewModel
/// </summary> /// </summary>
private void HandleOrderCode(string orderCode) private void HandleOrderCode(string orderCode)
{ {
theOrderCode = orderCode;
if (isComplete) if (isComplete)
{
var order = _prodOrderInfoService.GetProdOrderInfoByOrderCode(orderCode);
if (order != null)
{ {
if (isSearch == 1) if (isSearch == 1)
{ {
ClearOrderCodeAction?.Invoke();
//更新当前工单状态 //更新当前工单状态
_databaseHandleBusniess.UpdateOrderInfoStatus(orderCode,"1"); _databaseHandleBusniess.UpdateOrderInfoStatus(order.OrderCode, "1");
//判断当前工位的工单编号是否存在 //判断当前工位的工单编号是否存在
var plan = _prodPlanInfoService.GetProdPLanInfoByOrderCode(RfidHandleBusniess.stationCode, orderCode); var plan = _prodPlanInfoService.GetProdPLanInfoByOrderCode(RfidHandleBusniess.stationCode, order.OrderCode);
if (plan == null)//不存在就在生产工单表中新增一条当前工位的订单且执行状态改为4,重新检索,并高亮这条工单,执行按钮可用 if (plan == null)//不存在就在生产工单表中新增一条当前工位的订单且执行状态改为4,重新检索,并高亮这条工单,执行按钮可用
{ {
foreach(var item in RfidHandleBusniess.stationList) foreach (var item in RfidHandleBusniess.stationList)
{ {
//现扫描一个订单码,同时插入三张(出布包胶成型)工单表 //现扫描一个订单码,同时插入三张(出布包胶成型)工单表
_databaseHandleBusniess.AddNewPlanInfo(orderCode, item , DeviceCode, ProcessCode, "0"); _databaseHandleBusniess.AddNewPlanInfo(order.OrderCode, item, DeviceCode, ProcessCode, "0");
} }
} }
else//存在将本条数据的执行状态改为4高亮这条工单执行按钮可用 else//存在将本条数据的执行状态改为4高亮这条工单执行按钮可用
@ -480,7 +516,7 @@ namespace SlnMesnac.WPF.ViewModel
//var info = _databaseHandleBusniess.SelectPlanStatus(orderCode, RfidHandleBusniess.stationCode, DeviceCode, ProcessCode, "0"); //var info = _databaseHandleBusniess.SelectPlanStatus(orderCode, RfidHandleBusniess.stationCode, DeviceCode, ProcessCode, "0");
if (plan.PlanStatus != "2") if (plan.PlanStatus != "2")
{ {
_databaseHandleBusniess.UpdatePlanStatus(orderCode, RfidHandleBusniess.stationCode, DeviceCode, ProcessCode, "4"); _databaseHandleBusniess.UpdatePlanStatus(order.OrderCode, RfidHandleBusniess.stationCode, DeviceCode, ProcessCode, "4");
} }
else else
{ {
@ -489,10 +525,11 @@ namespace SlnMesnac.WPF.ViewModel
} }
Search(); Search();
} }
//else }
//{ else
// MessageBox.Show("请先检索工单!"); {
//} MessageBox.Show("此订单不存在,请联系管理员!");
}
} }
else else
{ {
@ -513,6 +550,9 @@ namespace SlnMesnac.WPF.ViewModel
{ {
try try
{ {
var Info = OrderCodeText.GetHashCode();
// 将当前记录存为实体可以通过parameter获取当前记录的信息 // 将当前记录存为实体可以通过parameter获取当前记录的信息
string orderCode = _selectedRow.OrderCode.ToString(); string orderCode = _selectedRow.OrderCode.ToString();
string planCode = _selectedRow.PlanCode.ToString(); string planCode = _selectedRow.PlanCode.ToString();
@ -521,6 +561,8 @@ namespace SlnMesnac.WPF.ViewModel
//BaseStaffInfo staffInfo = _baseStaffService.GetMonitorByTeamCode(currentRecord.TeamCode); //BaseStaffInfo staffInfo = _baseStaffService.GetMonitorByTeamCode(currentRecord.TeamCode);
RecordStaffAttendance nextRecord = _recordStaffAttendanceService.GetLastestOffRecord(); RecordStaffAttendance nextRecord = _recordStaffAttendanceService.GetLastestOffRecord();
// 向detail表里插入一条数据 // 向detail表里插入一条数据
//当前班长
var monitor = _databaseHandleBusniess.GetMonitor(RfidHandleBusniess.stationCode);
if (pLanInfo.CompleteAmount == "0.00") if (pLanInfo.CompleteAmount == "0.00")
{ {
ProdPlanDetail prodPlanDetail = new ProdPlanDetail ProdPlanDetail prodPlanDetail = new ProdPlanDetail
@ -529,7 +571,8 @@ namespace SlnMesnac.WPF.ViewModel
MaterialCode = pLanInfo.MaterialCode, MaterialCode = pLanInfo.MaterialCode,
PlanAmount = pLanInfo.PlanAmount, PlanAmount = pLanInfo.PlanAmount,
CompleteAmount = pLanInfo.CompleteAmount, CompleteAmount = pLanInfo.CompleteAmount,
BeginTime = DateTime.Now.ToString(), BeginTime = theStartTime,
CreatedBy = monitor.staffName
//CurrentStaffId = staffInfo.StaffId //CurrentStaffId = staffInfo.StaffId
//NextStaffId = nextRecord.StaffId, //NextStaffId = nextRecord.StaffId,
}; };
@ -569,6 +612,7 @@ namespace SlnMesnac.WPF.ViewModel
OrderCodeText = pLanInfo.OrderCode; OrderCodeText = pLanInfo.OrderCode;
MaterialNameText = pLanInfo.MaterialName; MaterialNameText = pLanInfo.MaterialName;
StationCodeText = pLanInfo.StationCode; StationCodeText = pLanInfo.StationCode;
//CurrentMonitorName = _baseStaffService.GetStaffInfoByStaffId(RfidHandleBusniess.staffId).StaffName;
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () => System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{ {
ProdPLanDetailDataGrid.Clear(); ProdPLanDetailDataGrid.Clear();
@ -590,6 +634,18 @@ namespace SlnMesnac.WPF.ViewModel
//} //}
} }
/// <summary>
/// 清空右边信息和明细
/// </summary>
private void Clear()
{
PlanCodeText = "";
OrderCodeText = "";
MaterialNameText = "";
ProdPLanDetailDataGrid.Clear();
}
/// <summary> /// <summary>
/// 显示班组成员 /// 显示班组成员
/// </summary> /// </summary>

@ -173,6 +173,7 @@ namespace SlnMesnac.WPF.ViewModel
{ {
info = OrderCodeText; info = OrderCodeText;
}; };
ExecuteViewModel.ClearOrderCodeAction += ClearOrderCode;
} }
/// <summary> /// <summary>
@ -209,6 +210,14 @@ namespace SlnMesnac.WPF.ViewModel
} }
#endregion #endregion
/// <summary>
/// 清空订单编码
/// </summary>
private void ClearOrderCode()
{
OrderCodeText = "";
}
/// <summary> /// <summary>
/// 窗体控制 /// 窗体控制
/// </summary> /// </summary>

@ -20,6 +20,7 @@ namespace SlnMesnac.WPF.ViewModel
{ {
private ProdPlanInfoService _prodPlanInfoService; private ProdPlanInfoService _prodPlanInfoService;
private ProdPlanDetailService _prodPlanDetailService; private ProdPlanDetailService _prodPlanDetailService;
private IBaseStaffService _baseStaffService;
private DatabaseHandleBusniess _databaseHandleBusniess; private DatabaseHandleBusniess _databaseHandleBusniess;
private ProdPLanInfo planInfo; private ProdPLanInfo planInfo;
private ProdPlanDetail planDetail; private ProdPlanDetail planDetail;
@ -28,6 +29,7 @@ namespace SlnMesnac.WPF.ViewModel
private double newAmountDouble; private double newAmountDouble;
private double result; private double result;
#region #region
/// <summary> /// <summary>
/// 按钮文字转换事件 /// 按钮文字转换事件
@ -37,6 +39,8 @@ namespace SlnMesnac.WPF.ViewModel
//刷新委托 //刷新委托
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo); public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
public static event RefreshDelegate RefreshDelegateEvent; public static event RefreshDelegate RefreshDelegateEvent;
public static Action<int>? RefrashClearAction;
#endregion #endregion
public ProductionReportViewModel() public ProductionReportViewModel()
@ -44,6 +48,7 @@ namespace SlnMesnac.WPF.ViewModel
_prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>(); _prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>();
_prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>(); _prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>();
_databaseHandleBusniess = App.ServiceProvider.GetService<DatabaseHandleBusniess>(); _databaseHandleBusniess = App.ServiceProvider.GetService<DatabaseHandleBusniess>();
_baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
ConfirmCommand = new RelayCommand(Confirm); ConfirmCommand = new RelayCommand(Confirm);
EndPlanCommand = new RelayCommand(EndPlan); EndPlanCommand = new RelayCommand(EndPlan);
ContinueCommand = new RelayCommand(Continue); ContinueCommand = new RelayCommand(Continue);
@ -62,7 +67,7 @@ namespace SlnMesnac.WPF.ViewModel
if (planInfo != null) if (planInfo != null)
{ {
complateRate = GetComplateRate(Convert.ToDouble(planInfo.CompleteAmount), planInfo.PlanAmount); complateRate = GetComplateRate(Convert.ToDouble(planInfo.CompleteAmount), planInfo.PlanAmount);
if (complateRate > 0.9) if (complateRate > -10)
{ {
EndButtonColor = "#FF11B514"; EndButtonColor = "#FF11B514";
} }
@ -156,80 +161,96 @@ namespace SlnMesnac.WPF.ViewModel
/// </summary> /// </summary>
private void Confirm() private void Confirm()
{ {
DateTime startTime = DateTime.Parse(ExecuteViewModel.intervalvalTime); // 获取最新工单明细的结束时间
if ((DateTime.Now - startTime).TotalMinutes > 15) var detail = _databaseHandleBusniess.GetLastDetailEndTime(planInfo.PlanCode);
// 如果最新工单明细没有结束时间,跳过时间判断
if (!string.IsNullOrEmpty(detail.EndTime))
{ {
if (EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效 DateTime startTime = DateTime.Parse(detail.EndTime);
if ((DateTime.Now - startTime).TotalMinutes <= 15)
{ {
string newAmount = NewAmountText; HintText = "当前工单距离上次提交不足15分钟";
RfidHandleBusniess.theNewAmount = NewAmountText; return;
if (newAmount != "")
{
bool isNum = true;
foreach (char x in newAmount)
{
if (!char.IsNumber(x) && x != '.')
{
isNum = false;
} }
} }
if (isNum)
// 如果没有班组当班,直接返回
if (!EmployeeLoginViewModel.isOnDuty)
{ {
HintText = "请撤回最新工单明细!"; HintText = "没有班组当班,无法执行此操作!";
//将新增产量加到实际产量中 return;
currentAmountDouble = Convert.ToDouble(planInfo.CompleteAmount); }
newAmountDouble = Convert.ToDouble(newAmount);
result = currentAmountDouble + newAmountDouble; // 获取班组长信息
//planDetail = new ProdPlanDetail(); var monitor = _databaseHandleBusniess.GetMonitor(RfidHandleBusniess.stationCode);
if (monitor == null)
{
HintText = "班长未打卡,无法执行此操作!";
return;
}
//
complateRate = GetComplateRate(Convert.ToDouble(planInfo.CompleteAmount), planInfo.PlanAmount);
if (complateRate > 10)
{
HintText = "实际数量已超过计划数量,请结束工单";
return;
}
// 获取新输入的产量
string newAmount = NewAmountText?.Trim();
if (string.IsNullOrEmpty(newAmount))
{
HintText = "不能为空!";
return;
}
// 验证输入的产量是否为数字
if (!IsNumeric(newAmount))
{
HintText = "输入有误,请输入阿拉伯数字!";
return;
}
// 更新计划信息
RfidHandleBusniess.theNewAmount = newAmount;
double currentAmountDouble = Convert.ToDouble(planInfo.CompleteAmount);
double newAmountDouble = Convert.ToDouble(newAmount);
double result = currentAmountDouble + newAmountDouble;
// 设置工单明细
planDetail.CurrentStaffId = monitor.staffId; // 班长ID
planDetail.CreatedBy = monitor.staffName; // 班长名称
planDetail.CompleteAmount = newAmountDouble.ToString(); planDetail.CompleteAmount = newAmountDouble.ToString();
planInfo.CompleteAmount = result.ToString(); planInfo.CompleteAmount = result.ToString();
if (planDetail.EndTime == null)//第一条明细 planDetail.BeginTime = planDetail.EndTime ?? ExecuteViewModel.theStartTime;
{
planDetail.BeginTime = ExecuteViewModel.theStartTime;
}
else
{
planDetail.BeginTime = planDetail.EndTime;
}
planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
ExecuteViewModel.intervalvalTime = planDetail.EndTime;
planDetail.BatchNumber += 1; planDetail.BatchNumber += 1;
//ExecuteViewModel.batchNums = planDetail.BatchNumber.ToString();
//保存工单的执行人员 // 保存数据
List<RecordStaffRealTime> realTimes = _databaseHandleBusniess.GetRecordStaffRealTimes(); var realTimes = _databaseHandleBusniess.GetRecordStaffRealTimes(planInfo.StationCode);
_prodPlanDetailService.Insert(planDetail); _prodPlanDetailService.Insert(planDetail);
_prodPlanInfoService.Update(planInfo); _prodPlanInfoService.Update(planInfo);
_databaseHandleBusniess.InsertPlanExecuteUser(planInfo, planDetail, realTimes); _databaseHandleBusniess.InsertPlanExecuteUser(planInfo, planDetail, realTimes);
// 刷新并更新UI
Refresh(); Refresh();
HintText = "已提交!"; HintText = "已提交!";
RefreshDelegateEvent?.Invoke(planInfo); RefreshDelegateEvent?.Invoke(planInfo);
//ExecuteViewModel.isComplete = true;
// 更新完成率
complateRate = GetComplateRate(result, PlanAmountText); complateRate = GetComplateRate(result, PlanAmountText);
if (complateRate > 0.9) if (complateRate > -10)
{ {
EndButtonColor = "#FF11B514"; EndButtonColor = "#FF11B514";
} }
} }
else
// 检查字符串是否为有效数字
private bool IsNumeric(string value)
{ {
//提示框提示错误信息 return value.All(c => char.IsDigit(c) || c == '.');
HintText = "输入有误,请输入阿拉伯数字!";
}
}
else
{
HintText = "不能为空!";
}
}
else
{
HintText = "没有班组当班,无法执行此操作!";
}
}
else
{
HintText = "当前工单距离上次提交不足15分钟";
}
} }
/// <summary> /// <summary>
@ -238,37 +259,44 @@ namespace SlnMesnac.WPF.ViewModel
public ICommand EndPlanCommand { get; private set; } public ICommand EndPlanCommand { get; private set; }
private void EndPlan() private void EndPlan()
{ {
//判断工单实际产量与目标产量的差距,满足才能执行结束 // 判断工单实际产量与目标产量的差距,满足才能执行结束
if (complateRate > 0.9) if (complateRate > -10)
{ {
if (EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效 if (EmployeeLoginViewModel.isOnDuty == true) // 是否有班组当班,无当班时操作无效
{ {
if (planDetail != null && planInfo != null) if (planDetail != null && planInfo != null)
{ {
//planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//_prodPlanDetailService.Insert(planDetail); //_prodPlanDetailService.Insert(planDetail);
planInfo.PlanStatus = "2"; planInfo.PlanStatus = "2";
planInfo.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); planInfo.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
double planAmountDouble = Convert.ToDouble(planInfo.PlanAmount); double planAmountDouble = Convert.ToDouble(planInfo.PlanAmount);
double completeAmountDouble = Convert.ToDouble(planInfo.CompleteAmount); double completeAmountDouble = Convert.ToDouble(planInfo.CompleteAmount);
ExecuteViewModel.isComplete = true; ExecuteViewModel.isComplete = true;
if (planAmountDouble == completeAmountDouble)
// 使用 switch-case 来处理完成情况
switch (planAmountDouble.CompareTo(completeAmountDouble))
{ {
planInfo.CompFlag = "0";//正常完成 case 0: // 完成量等于计划量
} planInfo.CompFlag = "0"; // 正常完成
else if (planAmountDouble > completeAmountDouble) break;
{ case int n when (n > 0): // 完成量小于计划量
planInfo.CompFlag = "1";//不足目标产量降级处理 planInfo.CompFlag = "1"; // 不足目标产量降级处理
} break;
else case int n when (n < 0): // 完成量大于计划量
{ planInfo.CompFlag = "2"; // 超额完成
planInfo.CompFlag = "2";//超额完成 break;
} }
_prodPlanInfoService.Update(planInfo); _prodPlanInfoService.Update(planInfo);
ExecuteViewModel.stations += 1; ExecuteViewModel.stations += 1;
} }
//关闭窗口
// 关闭窗口
Application.Current.Windows.OfType<ProductionReportWin>().First().Close(); Application.Current.Windows.OfType<ProductionReportWin>().First().Close();
RefrashClearAction?.Invoke(0);
} }
} }
else else
@ -277,6 +305,7 @@ namespace SlnMesnac.WPF.ViewModel
} }
} }
/// <summary> /// <summary>
/// 继续执行 /// 继续执行
/// </summary> /// </summary>
@ -298,6 +327,7 @@ namespace SlnMesnac.WPF.ViewModel
ExecuteViewModel.isComplete = true; ExecuteViewModel.isComplete = true;
//关闭窗口 //关闭窗口
Application.Current.Windows.OfType<ProductionReportWin>().First().Close(); Application.Current.Windows.OfType<ProductionReportWin>().First().Close();
RefrashClearAction?.Invoke(0);
} }
@ -310,7 +340,7 @@ namespace SlnMesnac.WPF.ViewModel
private double GetComplateRate(double complateAmount, string planAmount) private double GetComplateRate(double complateAmount, string planAmount)
{ {
double plan = Convert.ToDouble(planAmount); double plan = Convert.ToDouble(planAmount);
return complateAmount / plan; return complateAmount - plan;
} }
public void OnPropertyChanged([CallerMemberName] string propertyName = "") public void OnPropertyChanged([CallerMemberName] string propertyName = "")

@ -14,7 +14,7 @@
{ {
"configId": "mes", "configId": "mes",
"dbType": 1, "dbType": 1,
"connStr": "server=119.45.202.115;uid=sa;pwd=haiwei@123;database=xmxs_os" "connStr": "server=119.45.202.115;uid=sa;pwd=haiwei@123;database=xmxs_os;Encrypt=True;TrustServerCertificate=True;"
} }
//{ //{
// "configId": "mcs", // "configId": "mcs",

Loading…
Cancel
Save