change -根据变动的需求修改完成

main
frankiecao 12 months ago committed by 启龙 曹
commit 7672e10218

@ -1,7 +1,9 @@
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SlnMesnac.Business.business
@ -9,72 +11,183 @@ namespace SlnMesnac.Business.business
public class DatabaseHandleBusniess
{
private ProdPlanInfoService _prodPlanInfoService;
private ProdPlanExecuteUserService _prodPlanExecuteUserService;
private ProdOrderInfoService _prodOrderInfoService;
private IRecordStaffRealTimeService _recordStaffRealTimeService;
private List<ProdPLanInfo> prodPlanInfos;
public DatabaseHandleBusniess(ProdPlanInfoService prodPlanInfoService)
public DatabaseHandleBusniess(ProdPlanInfoService prodPlanInfoService, ProdOrderInfoService prodOrderInfoService, ProdPlanExecuteUserService prodPlanExecuteUserService,IRecordStaffRealTimeService recordStaffRealTimeService)
{
_prodPlanInfoService = prodPlanInfoService;
_prodOrderInfoService = prodOrderInfoService;
prodPlanInfos = _prodPlanInfoService.GetRecordStaffAttendances();
_prodPlanExecuteUserService = prodPlanExecuteUserService;
_recordStaffRealTimeService = recordStaffRealTimeService;
}
/// <summary>
/// 查询所有计划工位
/// 根据订单编号查询订单信息
/// </summary>
/// <param name="orderCode"></param>
/// <returns></returns>
public List<string> GetProductLineCodes()
public ProdOrderInfo GetProdOrderInfoByOrderCode(string orderCode)
{
List<string> productLineCodes = new List<string>();
foreach (var prodPlanInfo in prodPlanInfos)
{
productLineCodes.Add(prodPlanInfo.StationCode);
}
return productLineCodes;
return _prodOrderInfoService.GetProdOrderInfoByOrderCode(orderCode);
}
/// <summary>
/// 查询所有工单编号
/// 添加新的工单信息
/// </summary>
/// <returns></returns>
public List<string> GetPlanCodes()
/// <param name="orderCode"></param>
/// <param name="stationCode"></param>
public void AddNewPlanInfo(string? orderCode,string? stationCode,string? deviceCode,string? processCode,string? importFlag)
{
List<string> planCodes = new List<string>();
foreach (var prodPlanInfo in prodPlanInfos)
var orderInfo = GetProdOrderInfoByOrderCode(orderCode);
string randomString = GenerateRandomString(14);
_prodPlanInfoService.Insert(new ProdPLanInfo()
{
planCodes.Add(prodPlanInfo.PlanCode);
}
return planCodes;
PlanCode = orderCode + randomString,
OrderCode = orderCode,
MaterialCode = orderInfo.MaterialCode,
MaterialName = orderInfo.MaterialName,
StationCode = stationCode,
DeviceCode = deviceCode,
PlanAmount = orderInfo.OrderAmount,
CompleteAmount = orderInfo.CompleteAmount,
PlanStatus = "4",
ProcessCode = processCode,
ImportFlag = importFlag
});
}
/// <summary>
/// 查询所有订单编号
/// 生成随机字符串
/// </summary>
/// <param name="length"></param>
/// <returns></returns>
public List<string> GetOrderCodes()
private string GenerateRandomString(int length)
{
const string chars = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder result = new StringBuilder();
List<string> orderCodes = new List<string>();
foreach (var prodPlanInfo in prodPlanInfos)
for (int i = 0; i < length; i++)
{
orderCodes.Add(prodPlanInfo.OrderCode);
result.Append(chars[random.Next(chars.Length)]);
}
return orderCodes;
return result.ToString();
}
/// <summary>
/// 查询所有物料名称
/// 更新订单状态
/// </summary>
/// <param name="orderCode"></param>
/// <param name="stationCode"></param>
/// <param name="deviceCode"></param>
/// <param name="processCode"></param>
/// <param name="v"></param>
/// <exception cref="NotImplementedException"></exception>
public void UpdatePlanStatus(string orderCode, string stationCode, string deviceCode, string processCode, string status)
{
_prodPlanInfoService.UpdatePlanStatus(orderCode, stationCode, deviceCode, processCode, status);
}
/// <summary>
/// 插入工单执行人员信息
/// </summary>
public void InsertPlanExecuteUser(ProdPLanInfo prodPlanInfo,ProdPlanDetail prodPlanDetail,List<RecordStaffRealTime> realTimes)
{
foreach (var item in realTimes)
{
ProdPlanExecuteUser prodPlanExecuteUser = new ProdPlanExecuteUser()
{
PlanCode = prodPlanInfo.PlanCode,
OrderCode = prodPlanInfo.OrderCode,
ProcessCode = prodPlanInfo.ProcessCode,
StationCode = prodPlanInfo.StationCode,
StaffId = item.StaffId,
CompleteAmount = prodPlanDetail.CompleteAmount,
PlanBeginDate = prodPlanInfo.BeginTime,
PlanEndDate = prodPlanInfo.EndTime,
CreatedBy = prodPlanInfo.CreatedBy,
CreatedTime = prodPlanInfo.CreatedTime,
UpdatedBy = prodPlanInfo.UpdatedBy,
UpdatedTime = prodPlanInfo.UpdatedTime,
BatchNumber = prodPlanDetail.BatchNumber
};
_prodPlanExecuteUserService.Insert(prodPlanExecuteUser);
}
}
/// <summary>
/// 查询所有工单执行人员信息
/// </summary>
/// <returns></returns>
public List<string> GetMaterialNames()
public List<RecordStaffRealTime> GetRecordStaffRealTimes()
{
var list = _recordStaffRealTimeService.Query();
return list;
}
List<string> materialNames = new List<string>();
foreach (var prodPlanInfo in prodPlanInfos)
{
materialNames.Add(prodPlanInfo.MaterialName);
}
return materialNames;
}
///// <summary>
///// 查询所有计划工位
///// </summary>
///// <returns></returns>
//public List<string> GetProductLineCodes()
//{
// List<string> productLineCodes = new List<string>();
// foreach (var prodPlanInfo in prodPlanInfos)
// {
// productLineCodes.Add(prodPlanInfo.StationCode);
// }
// return productLineCodes;
//}
///// <summary>
///// 查询所有工单编号
///// </summary>
///// <returns></returns>
//public List<string> GetPlanCodes()
//{
// List<string> planCodes = new List<string>();
// foreach (var prodPlanInfo in prodPlanInfos)
// {
// planCodes.Add(prodPlanInfo.PlanCode);
// }
// return planCodes;
//}
///// <summary>
///// 查询所有订单编号
///// </summary>
///// <returns></returns>
//public List<string> GetOrderCodes()
//{
// List<string> orderCodes = new List<string>();
// foreach (var prodPlanInfo in prodPlanInfos)
// {
// orderCodes.Add(prodPlanInfo.OrderCode);
// }
// return orderCodes;
//}
///// <summary>
///// 查询所有物料名称
///// </summary>
///// <returns></returns>
//public List<string> GetMaterialNames()
//{
// List<string> materialNames = new List<string>();
// foreach (var prodPlanInfo in prodPlanInfos)
// {
// materialNames.Add(prodPlanInfo.MaterialName);
// }
// return materialNames;
//}
}
}

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using ConsoleApp;
@ -19,15 +20,17 @@ namespace SlnMesnac.Business.business
{
private IRecordStaffAttendanceService _recordStaffAttendanceService;
private IRecordStaffCommuteService _recordStaffCommuteService;
private IRecordStaffRealTimeService _recordStaffRealTimeService;
private string currentTime;
private string teamMembers = null;
private List<string> members = new List<string>();
public static string stationCode = "";
public RfidHandleBusniess(IRecordStaffAttendanceService recordStaffAttendanceService, IRecordStaffCommuteService recordStaffCommuteService)
public RfidHandleBusniess(IRecordStaffAttendanceService recordStaffAttendanceService, IRecordStaffCommuteService recordStaffCommuteService, IRecordStaffRealTimeService recordStaffRealTimeService)
{
this._recordStaffAttendanceService = recordStaffAttendanceService;
this._recordStaffCommuteService = recordStaffCommuteService;
this._recordStaffRealTimeService = recordStaffRealTimeService;
}
@ -46,10 +49,11 @@ namespace SlnMesnac.Business.business
TeamCode = staff.TeamCode,
Remark = staff.Remark,
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
};
_recordStaffAttendanceService.Insert(recordStaffAttendance);
return _recordStaffAttendanceService.GetRecordStaffAttendances();
return _recordStaffAttendanceService.GetRecordStaffAttendances(stationCode);
}
/// <summary>
@ -83,23 +87,62 @@ namespace SlnMesnac.Business.business
}
}
public string SpliceTeamMember(BaseStaffInfo baseStaffInfo)
/// <summary>
///
/// </summary>
/// <param name="baseStaffInfo"></param>
/// <returns></returns>
public string SpliceTeamMember()
{
RecordStaffAttendance recordStaffAttendance = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(baseStaffInfo.StaffId);
string type = recordStaffAttendance.AttendanceType;
if (type == "0")//上班,添加员工名字转成字符串
//RecordStaffAttendance recordStaffAttendance = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(baseStaffInfo.StaffId,stationCode);
List<RecordStaffRealTime> recordStaffRealTimeList = _recordStaffRealTimeService.GetRecordStaffRealTime(stationCode);
//string type = recordStaffAttendance.AttendanceType;
//if (type == "0")//上班,添加员工名字转成字符串
//{
// members.Add(baseStaffInfo.StaffName); // Add the staff member's name to the list
// teamMembers = string.Join(" // ", members); // Convert the list of names to a string separated by commas
//}
//else if (type == "1")//下班,删除下班员工的名字再转为字符串
//{
// members.Remove(baseStaffInfo.StaffName); // Remove the staff member's name from the list
// teamMembers = string.Join(" // ", members); // Convert the updated list of names to a string separated by commas
//}
foreach(var item in recordStaffRealTimeList)
{
members.Add(baseStaffInfo.StaffName); // Add the staff member's name to the list
teamMembers = string.Join("| ", members); // Convert the list of names to a string separated by commas
teamMembers += item.CreateBy + " / ";
}
else if (type == "1")//下班,删除下班员工的名字再转为字符串
{
members.Remove(baseStaffInfo.StaffName); // Remove the staff member's name from the list
teamMembers = string.Join("| ", members); // Convert the updated list of names to a string separated by commas
}
return teamMembers;
}
/// <summary>
/// 处理并插入实时打卡记录
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public List<RecordStaffRealTime> HandleAndInsertStaffRealTime(BaseStaffInfo staff,int isCheckOn)
{
if (isCheckOn == 0)
{
RecordStaffRealTime recordStaffRealTime = new RecordStaffRealTime
{
StaffId = staff.StaffId,
AttendanceType = isCheckOn.ToString(),
TeamCode = staff.TeamCode,
Remark = staff.Remark,
CreateBy = staff.StaffName,
CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
StationCode = stationCode
};
_recordStaffRealTimeService.Insert(recordStaffRealTime);
}
else if(isCheckOn == 1 || isCheckOn == 2)
{
var realTime = _recordStaffRealTimeService.Query(recordStaffRealTime => recordStaffRealTime.StaffId == staff.StaffId
&& recordStaffRealTime.StationCode == stationCode
&& recordStaffRealTime.AttendanceType == "0").FirstOrDefault();
_recordStaffRealTimeService.Delete(realTime);
}
return _recordStaffRealTimeService.GetRecordStaffRealTime(stationCode);
}
}
}

@ -0,0 +1,242 @@
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Linq;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
using System.Text.Json.Nodes;
namespace SlnMesnac.Business
{
public class SerialPortBusiness
{
private static readonly object _object = new object();
private SerialPort _serialPort;
public delegate void RefreshSerialPortDeviceStatus(int isFlag);
public event RefreshSerialPortDeviceStatus RefreshSerialPortDeviceStatusEvent;
/// <summary>
/// 刷新日志内容
/// </summary>
public delegate void RefreshLogMessage(string message);
public event RefreshLogMessage RefreshLogMessageEvent;
//public delegate void ReceivedMeterConfigInfo(ElectricMeterInfoDto electricMeterInfo, List<ElectricMeterConfigInfo> electricMeterConfigInfos);
//public event ReceivedMeterConfigInfo ReceivedMeterConfigInfoEvent;
public delegate void ReceivedBarcodeInfo(string barcodeInfo);
public static event ReceivedBarcodeInfo? ReceivedBarcodeInfoEvent;
//public delegate void ReceivedGatewayConfigInfo(GatewayInfoDto gatewayInfoDto);
//public event ReceivedGatewayConfigInfo ReceivedGatewayConfigInfoEvent;
/// <summary>
/// 获取系统内的串口
/// </summary>
/// <param name="serialPorts"></param>
public void GetSerialPorts(out List<string> serialPorts)
{
serialPorts = SerialPort.GetPortNames().ToList();
}
/// <summary>
/// 打开串口
/// </summary>
/// <param name="serialPort">串口号</param>
/// <param name="baudRate">波特率</param>
/// <param name="parity">校验位None = 0,Odd = 1, Even = 2,Mark = 3,Space = 4,</param>
/// <param name="dataBits">数据位</param>
/// <param name="stopBits">停止位</param>
public void OpenSerialPort(string serialPort, int baudRate, int parity, int dataBits, int stopBits)
{
if (string.IsNullOrEmpty(serialPort))
{
throw new ArgumentException("串口号不能为空");
}
_serialPort = new SerialPort(serialPort, baudRate, (System.IO.Ports.Parity)parity, dataBits, (StopBits)stopBits);
_serialPort.DataReceived += SerialPortDataReceived;
_serialPort.Open();
RefreshSerialPortDeviceStatusEvent?.Invoke(1);
}
/// <summary>
/// 关闭串口
/// </summary>
/// <exception cref="ArgumentException"></exception>
public void CloseSerialPort()
{
if (_serialPort == null)
{
throw new ArgumentException("串口实例为空");
}
_serialPort.Close();
RefreshSerialPortDeviceStatusEvent?.Invoke(2);
}
/// <summary>
/// 发送数据
/// </summary>
/// <param name="message"></param>
/// <exception cref="ArgumentException"></exception>
public void SendMessage(string message)
{
try
{
if (message == null)
{
throw new ArgumentException("发送内容为空");
}
//RefreshLogMessageEvent?.Invoke($"发送指令:{message}");
if(_serialPort != null && _serialPort.IsOpen)
{
_serialPort.Write(message);
RefreshLogMessageEvent?.Invoke("发送成功");
}
else
{
RefreshLogMessageEvent?.Invoke("串口未打开,无法发送数据");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
/// <summary>
/// 串口数据接收
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
lock (string.Empty)
{
Thread.Sleep(50);
SerialPort sp = (SerialPort)sender;
// 读取字节数据
int bytesToRead = _serialPort.BytesToRead;
byte[] buffer = new byte[bytesToRead];
sp.Read(buffer, 0, bytesToRead);
string data = System.Text.Encoding.ASCII.GetString(buffer);
if (!string.IsNullOrEmpty(data))
{
RefreshLogMessageEvent?.Invoke("Received data: " + data);
ReceivedBarcodeInfoEvent?.Invoke(data);
//Analys(data);
}
}
}
catch (Exception ex)
{
Console.WriteLine("接收数据时发生错误: " + ex.Message);
}
}
///// <summary>
///// 解析数据
///// </summary>
///// <param name="jsonStr"></param>
//public void Analys(string jsonStr)
//{
// try
// {
// if (jsonStr.Contains("OK"))
// {
// RefreshLogMessageEvent?.Invoke($"修改成功");
// return;
// }
// else if (jsonStr.Contains("Error"))
// {
// RefreshLogMessageEvent?.Invoke($"修改失败");
// return;
// }
// else if (jsonStr.Contains("MeterSerialNumber")) //电表信息
// {
// #region 判断JSON格式合法性获取第一个}为结尾,避免硬件返回多余数据
// int lastBraceIndex = jsonStr.IndexOf('}');
// if (lastBraceIndex != -1)
// {
// jsonStr = jsonStr.Substring(0, lastBraceIndex + 1);
// }
// else
// {
// RefreshLogMessageEvent?.Invoke($"设备信息指令有误:{jsonStr}");
// return;
// }
// #endregion
// RefreshLogMessageEvent?.Invoke($"解析电表设备信息:{jsonStr}");
// if (!string.IsNullOrEmpty(jsonStr))
// {
// var jsonObject = JObject.Parse(jsonStr);
// ElectricMeterInfoDto electricMeterInfo = JsonConvert.DeserializeObject<ElectricMeterInfoDto>(jsonObject.ToString());
// AnalysMeterConfig(jsonObject, ref electricMeterInfo, out List<ElectricMeterConfigInfo> electricMeterConfigInfos);
// ReceivedMeterConfigInfoEvent?.Invoke(electricMeterInfo, electricMeterConfigInfos);
// }
// }else if (jsonStr.Contains("NaturalGas"))
// {
// RefreshLogMessageEvent?.Invoke($"解析网关设备信息:{jsonStr}");
// GatewayInfoDto gatewayInfo = JsonConvert.DeserializeObject<GatewayInfoDto>(jsonStr);
// ReceivedGatewayConfigInfoEvent?.Invoke(gatewayInfo);
// }
// }
// catch (Exception ex)
// {
// RefreshLogMessageEvent?.Invoke($"解析逻辑异常:{ex.Message};原始数据:{jsonStr}");
// }
//}
///// <summary>
///// 解析子表配置信息
///// </summary>
///// <param name="jsonObject"></param>
///// <param name="electricMeterInfo"></param>
///// <param name="electricMeterConfigInfos"></param>
//private void AnalysMeterConfig(JObject jsonObject, ref ElectricMeterInfoDto electricMeterInfo, out List<ElectricMeterConfigInfo> electricMeterConfigInfos)
//{
// electricMeterConfigInfos = new List<ElectricMeterConfigInfo>();
// foreach (var property in jsonObject.Properties())
// {
// if (electricMeterInfo.GetType().GetProperty(property.Name) == null)
// {
// string proValue = property.Value.ToObject<string>();
// string[] proValueArray = proValue.Split(",");
// if (proValueArray.Length == 4)
// {
// ElectricMeterConfigInfo electricMeterConfigInfo = new ElectricMeterConfigInfo();
// electricMeterConfigInfo.PointName = property.Name;
// electricMeterConfigInfo.InitialAddress = proValueArray[0];
// electricMeterConfigInfo.Length = Convert.ToInt32(proValueArray[1]);
// electricMeterConfigInfo.Rate = proValueArray[2];
// electricMeterConfigInfo.DataType = Convert.ToInt32(proValueArray[3]);
// electricMeterConfigInfos.Add(electricMeterConfigInfo);
// }
// }
// }
//}
}
}

@ -13,7 +13,7 @@
<ItemGroup>
<Reference Include="HighRFIDSendCardDLL">
<HintPath>C:\Users\Administrator\Desktop\信明橡塑\测试文件\ConsoleApp\Library\HighRFIDSendCardDLL.dll</HintPath>
<HintPath>..\..\HighRFIDSendCardDLL.dll</HintPath>
</Reference>
</ItemGroup>

@ -52,7 +52,6 @@ namespace SlnMesnac.Config
/// </summary>
public List<RfidConfig> rfidConfig { get; set; }
/// <summary>
/// Redis配置
/// </summary>

@ -9,4 +9,10 @@
<PackageReference Include="SqlSugarCore" Version="5.1.4.134" />
</ItemGroup>
<ItemGroup>
<Reference Include="PresentationFramework">
<HintPath>C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll</HintPath>
</Reference>
</ItemGroup>
</Project>

@ -0,0 +1,109 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Text;
namespace SlnMesnac.Model.domain
{
[SugarTable("prod_order_info"), TenantAttribute("mes")]
[DataContract(Name = "ProdOrderInfo erp订单信息")]
public class ProdOrderInfo
{
/// <summary>
///
/// </summary>
[SugarColumn(ColumnName = "obj_id", IsPrimaryKey = true)]
public int ObjId { get; set; }
/// <summary>
/// ERP订单编号
/// </summary>
[SugarColumn(ColumnName = "order_code")]
public string OrderCode { get; set; }
/// <summary>
/// 物料编号
/// </summary>
[SugarColumn(ColumnName = "material_code")]
public string MaterialCode { get; set; }
/// <summary>
/// 物料名称
/// </summary>
[SugarColumn(ColumnName = "material_name")]
public string MaterialName { get; set; }
/// <summary>
/// 订单计划数量
/// </summary>
[SugarColumn(ColumnName = "order_amount")]
public string OrderAmount { get; set; }
/// <summary>
/// 完成数量
/// </summary>
[SugarColumn(ColumnName = "complete_amount")]
public string CompleteAmount { get; set; }
/// <summary>
/// 订单类型
/// </summary>
[SugarColumn(ColumnName = "order_type")]
public string OrderType { get; set; }
/// <summary>
/// 订单类型
/// </summary>
[SugarColumn(ColumnName = "order_status")]
public string OrderStatus { get; set; }
/// <summary>
/// 计划开始时间
/// </summary>
[SugarColumn(ColumnName = "begin_date")]
public string BeginDate { get; set; }
/// <summary>
/// 计划完成时间
/// </summary>
[SugarColumn(ColumnName = "end_date")]
public string EndDate { get; set; }
/// <summary>
/// 实际开始时间
/// </summary>
[SugarColumn(ColumnName = "real_begin_date")]
public string RealBeginDate { get; set; }
/// <summary>
/// 实际完成时间
/// </summary>
[SugarColumn(ColumnName = "real_end_date")]
public string RealEndDate { get; set; }
/// <summary>
/// 创建人
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string CreatedBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public string CreatedTime { get; set; }
/// <summary>
/// 更新人
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string UpdatedBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public string UpdatedTime { get; set; }
}
}

@ -13,7 +13,7 @@ namespace SlnMesnac.Model.domain
/// <summary>
///
/// </summary>
[SugarColumn(ColumnName = "obj_id", IsPrimaryKey = true)]
[SugarColumn(ColumnName = "obj_id", IsPrimaryKey = true ,IsIdentity = true)]
public int ObjId { get; set; }
/// <summary>
@ -112,10 +112,40 @@ namespace SlnMesnac.Model.domain
[SugarColumn(ColumnName = "device_code")]
public string DeviceCode { get; set; }
/// <summary>
/// 计划开始时间
/// </summary>
[SugarColumn(ColumnName = "plan_begin_time")]
public string PlanBeginTime { get; set; }
/// <summary>
/// 计划结束时间
/// </summary>
[SugarColumn(ColumnName = "plan_end_time")]
public string PlanEndTime { get; set; }
/// <summary>
/// 工单状态
/// </summary>
[SugarColumn(ColumnName = "plan_status")]
public string PlanStatus { get; set; }
/// <summary>
/// 班组
/// </summary>
[SugarColumn(ColumnName = "classes")]
public string Classes { get; set; }
/// <summary>
/// 工序编号
/// </summary>
[SugarColumn(ColumnName = "process_code")]
public string ProcessCode { get; set; }
/// <summary>
/// 导入类型
/// </summary>
[SugarColumn(ColumnName = "import_flag")]
public string ImportFlag { get; set; }
}
}

@ -93,5 +93,11 @@ namespace SlnMesnac.Model.domain
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public string UpdatedTime { get; set; }
/// <summary>
/// 批次号锅数
/// </summary>
[SugarColumn(ColumnName = "batch_number")]
public int BatchNumber { get; set; }
}
}

@ -0,0 +1,97 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Text;
namespace SlnMesnac.Model.domain
{
[SugarTable("prod_plan_execute_user"), TenantAttribute("mes")]
[DataContract(Name = "ProdPlanExecuteUser 员工信息")]
public class ProdPlanExecuteUser
{
/// <summary>
///
/// </summary>
[SugarColumn(ColumnName = "obj_id", IsPrimaryKey = true, IsIdentity = true)]
public int ObjId { get; set; }
/// <summary>
/// 订单编号
/// </summary>
[SugarColumn(ColumnName = "order_code")]
public string OrderCode { get; set; }
/// <summary>
/// 工单编号
/// </summary>
[SugarColumn(ColumnName = "plan_code")]
public string PlanCode { get; set;}
/// <summary>
/// 工序编号
/// </summary>
[SugarColumn(ColumnName = "process_code")]
public string ProcessCode { get; set; }
/// <summary>
/// 工位编号
/// </summary>
[SugarColumn(ColumnName = "station_code")]
public string StationCode { get; set; }
/// <summary>
/// 员工编号
/// </summary>
[SugarColumn(ColumnName = "staff_id")]
public string StaffId { get; set; }
/// <summary>
/// 完成数量
/// </summary>
[SugarColumn(ColumnName = "complete_amount")]
public string CompleteAmount { get; set; }
/// <summary>
/// 工单明细开始时间
/// </summary>
[SugarColumn(ColumnName = "plan_begin_date")]
public string PlanBeginDate { get; set; }
/// <summary>
/// 工单明细结束时间
/// </summary>
[SugarColumn(ColumnName = "plan_end_date")]
public string PlanEndDate { get; set; }
/// <summary>
/// 创建人
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string CreatedBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public string CreatedTime { get; set; }
/// <summary>
/// 更新人
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string UpdatedBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public string UpdatedTime { get; set; }
/// <summary>
/// 批次号锅数
/// </summary>
[SugarColumn(ColumnName = "batch_number")]
public int BatchNumber { get; set; }
}
}

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

@ -0,0 +1,92 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Text;
namespace SlnMesnac.Model.domain
{
[SugarTable("record_staff_real_time"), TenantAttribute("mes")]
[DataContract(Name = "RecordStaffRealTime 员工实时打卡记录")]
public class RecordStaffRealTime
{
/// <summary>
///
/// </summary>
[SugarColumn(ColumnName = "obj_id", IsPrimaryKey = true, IsIdentity = true)]
public int ObjId { get; set; }
/// <summary>
/// 员工id
/// </summary>
[SugarColumn(ColumnName = "staff_id")]
public string StaffId { get; set; }
/// <summary>
/// 打卡类型
/// </summary>
[SugarColumn(ColumnName = "attendance_type")]
public string AttendanceType { get; set; }
/// <summary>
/// 班组编号
/// </summary>
[SugarColumn(ColumnName = "team_code")]
public string TeamCode { get; set; }
/// <summary>
/// 班次
/// </summary>
[SugarColumn(ColumnName = "classes")]
public string Classes { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnName = "remark")]
public string Remark { get; set; }
/// <summary>
/// 是否标识
/// </summary>
[SugarColumn(ColumnName = "is_flag")]
public string IsFlag { get; set; }
/// <summary>
/// 创建人
/// </summary>
[SugarColumn(ColumnName = "create_by")]
public string CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnName = "create_time")]
public string CreateTime { get; set; }
/// <summary>
/// 更新人
/// </summary>
[SugarColumn(ColumnName = "update_by")]
public string UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "update_time")]
public string UpdateTime { get; set; }
/// <summary>
/// 机台编号
/// </summary>
[SugarColumn(ColumnName = "machine_code")]
public string MachineCode { get; set; }
/// <summary>
/// 工位编号
/// </summary>
[SugarColumn(ColumnName = "station_code")]
public string StationCode { get; set; }
}
}

@ -22,6 +22,13 @@ namespace SlnMesnac.Repository.service
/// <returns></returns>
BaseStaffInfo GetStaffInfoByCardId(string cardId);
/// <summary>
/// 通过员工号获取员工信息
/// </summary>
/// <param name="cardId"></param>
/// <returns></returns>
BaseStaffInfo GetStaffInfoByStaffId(string staffId);
/// <summary>
/// 找出班组的班长
/// </summary>

@ -12,14 +12,14 @@ namespace SlnMesnac.Repository.service
/// 获取记录员工打卡信息
/// </summary>
/// <returns></returns>
List<RecordStaffAttendance> GetRecordStaffAttendances();
List<RecordStaffAttendance> GetRecordStaffAttendances(string stationCode);
/// <summary>
/// 根据员工id查询
/// </summary>
/// <param name="staffId"></param>
/// <returns></returns>
RecordStaffAttendance GetRecordStaffAttendanceByStaffId(string staffId);
RecordStaffAttendance GetRecordStaffAttendanceByStaffId(string staffId,string stationCode);
/// <summary>
/// 验证添加员工打卡记录

@ -0,0 +1,18 @@
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Repository.service
{
public interface IRecordStaffRealTimeService : IBaseService<RecordStaffRealTime>
{
/// <summary>
/// 获取指定工位的实时打卡记录
/// </summary>
/// <param name="stationCode"></param>
/// <returns></returns>
List<RecordStaffRealTime> GetRecordStaffRealTime(string stationCode);
}
}

@ -48,6 +48,20 @@ namespace SlnMesnac.Repository.service.Impl
return staffInfo;
}
public BaseStaffInfo GetStaffInfoByStaffId(string staffId)
{
BaseStaffInfo staffInfo = null;
try
{
staffInfo = base._rep.GetFirst(x => x.StaffId == staffId);
}
catch (Exception ex)
{
_logger.LogError($"根据卡号获取员工信息异常:{ex.Message}");
}
return staffInfo;
}
/// <summary>
/// 获取所有的员工信息
/// </summary>

@ -0,0 +1,39 @@
using Microsoft.Extensions.Logging;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SlnMesnac.Repository.service.Impl
{
public class ProdOrderInfoServiceImpl : BaseServiceImpl<ProdOrderInfo>, ProdOrderInfoService
{
private ILogger<ProdPlanInfoServiceImpl> _logger;
public ProdOrderInfoServiceImpl(Repository<ProdOrderInfo> rep, ILogger<ProdPlanInfoServiceImpl> logger) : base(rep)
{
_logger = logger;
}
/// <summary>
/// 根据订单号查询订单信息
/// </summary>
/// <param name="orderCode"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public ProdOrderInfo GetProdOrderInfoByOrderCode(string orderCode)
{
ProdOrderInfo prodOrderInfo = new ProdOrderInfo();
try
{
prodOrderInfo = _rep.GetFirst(x => x.OrderCode == orderCode);
}
catch (Exception ex)
{
_logger.LogError($"根据订单号查询订单信息异常{ex.Message}");
}
return prodOrderInfo;
}
}
}

@ -0,0 +1,18 @@
using Microsoft.Extensions.Logging;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Repository.service.Impl
{
public class ProdPlanExecuteUserServiceImpl: BaseServiceImpl<ProdPlanExecuteUser>, ProdPlanExecuteUserService
{
private ILogger<ProdPlanExecuteUserServiceImpl> _logger;
public ProdPlanExecuteUserServiceImpl(Repository<ProdPlanExecuteUser> repository, ILogger<ProdPlanExecuteUserServiceImpl> logger) : base(repository)
{
_logger = logger;
}
}
}

@ -26,14 +26,15 @@ namespace SlnMesnac.Repository.service.Impl
/// <param name="planCode"></param>
/// <param name="materialCode"></param>
/// <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>();
List<ProdPLanInfo> planInfoList = _rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(orderCode), x => x.OrderCode == orderCode)
.WhereIF(!string.IsNullOrEmpty(planCode), x => x.PlanCode == planCode)
.WhereIF(!string.IsNullOrEmpty(materialCode), x => x.MaterialCode == materialCode)
.WhereIF(!string.IsNullOrEmpty(stationCode), x => x.StationCode == stationCode)
.WhereIF(!string.IsNullOrEmpty(planStatus),x => x.PlanStatus == planStatus)
.WhereIF(!string.IsNullOrEmpty(planStatus), x => x.PlanStatus == planStatus || x.PlanStatus == "4")
.OrderByDescending(x => x.ObjId)
.ToList();
return planInfoList;
}
@ -52,5 +53,53 @@ namespace SlnMesnac.Repository.service.Impl
}
return pLanInfos;
}
/// <summary>
/// 根据工单号获取此工单
/// </summary>
/// <param name="planCode"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public ProdPLanInfo GetProdPLanInfoByOrderCode(string stationCode, string orderCode)
{
ProdPLanInfo prodPLan = new ProdPLanInfo();
try
{
prodPLan = _rep.GetFirst(x => x.OrderCode == orderCode && x.StationCode == stationCode);
}
catch (Exception ex)
{
_logger.LogError($"根据工单号获取此工单异常{ex.Message}");
}
return prodPLan;
}
/// <summary>
/// 更新工单状态
/// </summary>
/// <param name="orderCode"></param>
/// <param name="stationCode"></param>
/// <param name="deviceCode"></param>
/// <param name="processCode"></param>
/// <param name="status"></param>
/// <exception cref="NotImplementedException"></exception>
public bool UpdatePlanStatus(string orderCode, string stationCode, string deviceCode, string processCode, string status)
{
bool result = false;
try
{
var planInfo = _rep.GetFirst(x => x.OrderCode == orderCode && x.StationCode == stationCode && x.DeviceCode == deviceCode && x.ProcessCode == processCode);
if (planInfo != null)
{
planInfo.PlanStatus = status;
result = _rep.Update(planInfo);
}
}
catch (Exception ex)
{
_logger.LogError($"修改计划状态异常:{ex.Message}");
}
return result;
}
}
}

@ -17,12 +17,18 @@ namespace SlnMesnac.Repository.service.Impl
_logger = logger;
}
public List<RecordStaffAttendance> GetRecordStaffAttendances()
/// <summary>
/// 获取员工上班打卡信息
/// </summary>
/// <param name="stationCode"></param>
/// <param name="attendanceType"></param>
/// <returns></returns>
public List<RecordStaffAttendance> GetRecordStaffAttendances(string stationCode)
{
List<RecordStaffAttendance> records = null;
try
{
records = base._rep.GetList();
records = base._rep.GetList(x=>x.StationCode == stationCode && x.AttendanceType == "0");
records = records.OrderByDescending(x => x.CreateTime).Take(20).ToList();
}
catch (Exception ex)
@ -32,9 +38,11 @@ namespace SlnMesnac.Repository.service.Impl
return records;
}
public RecordStaffAttendance GetRecordStaffAttendanceByStaffId(string staffId)
public RecordStaffAttendance GetRecordStaffAttendanceByStaffId(string staffId,string stationCode)
{
RecordStaffAttendance recordStaffAttendances = _rep.AsQueryable().Where(x => x.StaffId == staffId).OrderByDescending(x => x.CreateTime).First();
RecordStaffAttendance recordStaffAttendances = _rep.AsQueryable().Where(x => x.StaffId == staffId)
.Where(x => x.StationCode == stationCode)
.OrderByDescending(x => x.CreateTime).First();
if (recordStaffAttendances != null)
{
return recordStaffAttendances;

@ -0,0 +1,41 @@
using Microsoft.Extensions.Logging;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SlnMesnac.Repository.service.Impl
{
public class RecordStaffRealTimeServiceImpl : BaseServiceImpl<RecordStaffRealTime>, IRecordStaffRealTimeService
{
private readonly ILogger<RecordStaffRealTime> _logger;
public RecordStaffRealTimeServiceImpl(Repository<RecordStaffRealTime> rep, ILogger<RecordStaffRealTime> logger) : base(rep)
{
_logger = logger;
}
/// <summary>
/// 获取指定工位的实时打卡记录
/// </summary>
/// <param name="stationCode"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public List<RecordStaffRealTime> GetRecordStaffRealTime(string stationCode)
{
List<RecordStaffRealTime> records = null;
try
{
records = base._rep.GetList(x => x.StationCode == stationCode && x.AttendanceType == "0");
records = records.OrderByDescending(x => x.CreateTime).Take(20).ToList();
}
catch (Exception ex)
{
_logger.LogError($"获取员工实时打卡记录异常{ex.Message}");
}
return records;
}
}
}

@ -0,0 +1,13 @@
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Repository.service
{
public interface ProdOrderInfoService : IBaseService<ProdOrderInfo>
{
ProdOrderInfo GetProdOrderInfoByOrderCode(string orderCode);
}
}

@ -0,0 +1,12 @@
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Repository.service
{
public interface ProdPlanExecuteUserService: IBaseService<ProdPlanExecuteUser>
{
}
}

@ -19,5 +19,22 @@ namespace SlnMesnac.Repository.service
/// </summary>
/// <returns></returns>
List<ProdPLanInfo> GetRecordStaffAttendancesByConditions(string orderCode,string planCode,string materialCode, string stationCode, string planStatus);
/// <summary>
/// 根据工单编号获取此工单
/// </summary>
/// <param name="planCode"></param>
/// <returns></returns>
ProdPLanInfo GetProdPLanInfoByOrderCode(string stationCode,string planCode);
/// <summary>
/// 更新工单状态
/// </summary>
/// <param name="orderCode"></param>
/// <param name="stationCode"></param>
/// <param name="deviceCode"></param>
/// <param name="processCode"></param>
/// <param name="status"></param>
public bool UpdatePlanStatus(string orderCode, string stationCode, string deviceCode, string processCode, string status);
}
}

@ -128,7 +128,7 @@ namespace SlnMesnac.Repository.service.@base
}
try
{
return _rep.DeleteById(model);
return _rep.Delete(model);
}
catch (Exception ex)
{

@ -48,8 +48,9 @@
</Border.Effect>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="1.3*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Left" Orientation="Horizontal">
<Button Content="工单执行" x:Name="Execute" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=Execute}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="10,0,10,0"/>
@ -58,8 +59,14 @@
<Button Content="最小化" x:Name="Minimized" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Minimized}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF9900" BorderBrush="#FF9900" Margin="0,0,10,0"/>
<Button Content="退 出" x:Name="Exit" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Exit}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF0033" BorderBrush="#FF0033" Margin="0,0,10,0"/>
</StackPanel>
<StackPanel Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right" Orientation="Horizontal">
<TextBlock Text="订单号" FontSize="20" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,10,0"/>
<TextBox Text="{Binding OrderCodeText}" Height="30" Width="200" FontSize="15" Foreground="White" HorizontalAlignment="Left" Margin="0,0,10,0"/>
<Button Content="确认" x:Name="Confirm" Command="{Binding ConfirmCommand}" CommandParameter="{Binding Name,ElementName=Employee}" Style="{StaticResource BUTTON_AGREE}" Width="80" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,30,0"/>
<Button Content="连 接" x:Name="Connect" Command="{Binding ConnectCommand}" CommandParameter="{Binding Name,ElementName=Connect}" Style="{StaticResource BUTTON_AGREE}" Width="80" Height="30" Background="#FF11B514" BorderBrush="#FF11B514" Margin="0,0,10,0"/>
<Button Content="断 开" x:Name="Break" Command="{Binding BreakCommand}" CommandParameter="{Binding Name,ElementName=Connect}" Style="{StaticResource BUTTON_AGREE}" Width="80" Height="30" Background="#FF0033" BorderBrush="#FF0033" Margin="0,0,0,0"/>
</StackPanel>
<StackPanel Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Right" Orientation="Horizontal">
<!--单行状态显示-->
<Grid>
<Grid.ColumnDefinitions>
@ -84,27 +91,27 @@
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<Ellipse Width="30" Height="30">
<StackPanel Grid.Column="1">
<Ellipse Width="35" Height="35" Margin="0,0,10,0">
<Ellipse.Style>
<Style TargetType="Ellipse">
<Style.Triggers>
<DataTrigger Binding="{Binding CodeGunStatus}" Value="0">
<Setter Property="Shape.Fill" Value="Orange"/>
<DataTrigger Binding="{Binding SerialPortDeviceStatus}" Value="0">
<Setter Property="Shape.Fill" Value="#FF9900"/>
</DataTrigger>
<DataTrigger Binding="{Binding CodeGunStatus}" Value="1">
<Setter Property="Shape.Fill" Value="Green"/>
<DataTrigger Binding="{Binding SerialPortDeviceStatus}" Value="1">
<Setter Property="Shape.Fill" Value="#FF11B514"/>
</DataTrigger>
<DataTrigger Binding="{Binding CodeGunStatus}" Value="2">
<Setter Property="Shape.Fill" Value="Red"/>
<DataTrigger Binding="{Binding SerialPortDeviceStatus}" Value="2">
<Setter Property="Shape.Fill" Value="#FF0033"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
</StackPanel>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="扫码枪" FontSize="15" Foreground="#FFFFFF" Margin="2,0,10,0"/>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Text="条码枪连接状态" FontSize="20" Foreground="#FFFFFF" Margin="2,0,10,0"/>
</StackPanel>
</Grid>
</StackPanel>

@ -45,7 +45,7 @@
<ItemGroup>
<Reference Include="HighRFIDSendCardDLL">
<HintPath>C:\Users\Administrator\Desktop\信明橡塑\测试文件\ConsoleApp\Library\HighRFIDSendCardDLL.dll</HintPath>
<HintPath>..\..\HighRFIDSendCardDLL.dll</HintPath>
</Reference>
</ItemGroup>

@ -32,9 +32,9 @@
<!--列头标题栏样式-->
<Style TargetType="DataGridColumnHeader">
<!--<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>-->
<Setter Property="VerticalContentAlignment" Value="Center"/>-->
<!--<Setter Property="Background" Value="#dddddd"/>
<Setter Property="Foreground" Value="Black"/>-->
<Setter Property="Foreground" Value="Black"/>-->
<!--<Setter Property="BorderThickness" Value="1" />-->
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="BorderBrush" Value="#4285DE" />
@ -135,9 +135,9 @@
<DropShadowEffect Color="#1254AB" Direction="270" BlurRadius="10" ShadowDepth="5" Opacity="0.5"/>
</Border.Effect>
<ScrollViewer VerticalScrollBarVisibility="Visible">
<DataGrid Name="dataGrid" ItemsSource="{Binding RecordStaffAttendanceDataGrid}" Background="Transparent"
<DataGrid Name="dataGrid" ItemsSource="{Binding RecordStaffRealTimeDataGrid}" Background="Transparent"
FontSize="15" ColumnHeaderHeight="30" LoadingRow="dgvMH_LoadingRow"
RowHeight="30" AutoGenerateColumns="False" RowHeaderWidth="0"
RowHeight="35" AutoGenerateColumns="False" RowHeaderWidth="0"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
BorderThickness="0" CanUserAddRows="False"
Foreground="#FFFFFF" SelectedItem="{Binding SelectedDataItem}">
@ -154,10 +154,26 @@
<DataGridTextColumn Binding="{Binding StaffId}" Header="员工ID" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding CreateBy}" Header="员工姓名" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<!--<DataGridTextColumn Binding="{Binding date,StringFormat=\{0:yyyy-MM-dd\}}" Header="工单编号" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->
<DataGridTextColumn Binding="{Binding AttendanceType}" Header="打卡类型" Width="3*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<!--<DataGridTextColumn Binding="{Binding AttendanceType}" Header="打卡类型" Width="3*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->
<!--<DataGridTextColumn Binding="{Binding hualway}" Header="性别" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->
<!--<DataGridTextColumn Binding="{Binding baggageTagCode}" Header="卡号" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->
<DataGridTextColumn Binding="{Binding TeamCode}" Header="班组编号" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<!--<DataGridTextColumn Binding="{Binding TeamCode}" Header="班组编号" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->
<DataGridTemplateColumn Header="操作" Width="1*" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<WrapPanel>
<Button Content="强退"
FontSize="15"
Width="60"
Height="25"
Command="{Binding DataContext.RemoveCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}"
IsEnabled="{Binding IsRemoveButtonEnabled}"
CommandParameter="{Binding StaffId}">
</Button>
</WrapPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>

@ -130,7 +130,7 @@
<TextBlock Text="{Binding StationTextBox}" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
<Border Grid.Row="1" Grid.Column="5">
<Button Content="检索" x:Name="Select" Command="{Binding SearchCommand}" CommandParameter="{Binding Name,ElementName=Select}" Style="{StaticResource BUTTON_AGREE}" FontSize="15" FontWeight="Bold" Background="#009999" BorderBrush="#FF36B5C1" Margin="15,5,15,5"/>
<Button Content="检索工单" x:Name="Select" Command="{Binding SearchCommand}" CommandParameter="{Binding Name,ElementName=Select}" Style="{StaticResource BUTTON_AGREE}" FontSize="15" FontWeight="Bold" Background="#009999" BorderBrush="#FF36B5C1" Margin="20,5,20,5"/>
</Border>
</Grid>
</Border>
@ -155,23 +155,58 @@
</DataGridTemplateColumn>
<!--<DataGridTextColumn Binding="{Binding IndexCode}" Header="序号" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->
<DataGridTextColumn Binding="{Binding OrderCode}" Header="ERP订单编号" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding PlanCode}" Header="工单编号" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding PlanCode}" Header="工单编号" Width="3.5*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<!--<DataGridTextColumn Binding="{Binding date,StringFormat=\{0:yyyy-MM-dd\}}" Header="工单编号" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->
<DataGridTextColumn Binding="{Binding MaterialName}" Header="物料名称" Width="3*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding PlanAmount}" Header="计划数量" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding CompleteAmount}" Header="完成数量" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTemplateColumn Header="操作" Width="2*" >
<DataGridTextColumn Binding="{Binding MaterialName}" Header="物料名称" Width="2*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding PlanAmount}" Header="计划数量" Width="1.5*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding CompleteAmount}" Header="完成数量" Width="1.5*" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTemplateColumn Header="操作" Width="1*" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<WrapPanel>
<!--<Button Content="查看" FontSize="18" CommandParameter="{Binding ID}" Margin="0 0 0 0" Command="{Binding DataContext.MoveUpCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid }}" />-->
<Button Content="执行" FontSize="15" Width="80" Height="34" Command="{Binding DataContext.ExecuteCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid }}"/>
<Button Content="执行"
FontSize="15"
Width="60"
Height="30"
Command="{Binding DataContext.ExecuteCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding}">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding PlanStatus}" Value="4">
<Setter Property="IsEnabled" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</WrapPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding PlanStatus}" Value="0">
<Setter Property="Background" Value="Transparent"/>
</DataTrigger>
<DataTrigger Binding="{Binding PlanStatus}" Value="1">
<Setter Property="Background" Value="Transparent"/>
</DataTrigger>
<DataTrigger Binding="{Binding PlanStatus}" Value="0">
<Setter Property="Background" Value="Transparent"/>
</DataTrigger>
<DataTrigger Binding="{Binding PlanStatus}" Value="0">
<Setter Property="Background" Value="Transparent"/>
</DataTrigger>
<DataTrigger Binding="{Binding PlanStatus}" Value="4">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
</Border>
</Grid>

@ -10,6 +10,7 @@ using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
using SlnMesnac.Repository.service;
using SlnMesnac.Repository.service.Impl;
using SlnMesnac.WPF.Views;
using SqlSugar;
using System;
using System.Collections.Generic;
@ -19,6 +20,7 @@ using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using static Microsoft.WindowsAPICodePack.Shell.PropertySystem.SystemProperties.System;
@ -34,6 +36,7 @@ namespace SlnMesnac.WPF.ViewModel
private string _checkInButtonText = "上班打卡";
private string _checkOutButtonText = "下班打卡";
public string _isCheckInButtonEnabled;
public string _isRemoveButtonEnabled;
private string _isCheckOutButtonEnabled;
private string _checkInButtonColor;
private string _checkOutButtonColor = "#009999";
@ -44,6 +47,7 @@ namespace SlnMesnac.WPF.ViewModel
public static bool isOnDuty = false;//是否有班组当班
private List<string> uniqueStrings = new List<string>();
private List<DateTime> timestamps = new List<DateTime>();
private BaseStaffInfo user;
/// <summary>
/// 按钮文字转换事件
@ -64,12 +68,19 @@ namespace SlnMesnac.WPF.ViewModel
/// </summary>
public ICommand OverCommand { get; private set; }
/// <summary>
/// 删除命令
/// </summary>
public ICommand RemoveCommand { get; private set; }
/// <summary>
///
/// </summary>
/// <param name="staffInfo"></param>
public delegate void TransmitUser(BaseStaffInfo staffInfo);
public delegate void TransmitUser();
public static event TransmitUser TransmitUserDelegateEvent;
public static Action<String>? _transmitToRemoveConfigAction;
#endregion
public EmployeeLoginViewModel()
@ -77,6 +88,7 @@ namespace SlnMesnac.WPF.ViewModel
hidUtils = new HidUtils();
CheckInCommand = new RelayCommand(CheckIn);
CheckOutCommand = new RelayCommand(CheckOut);
RemoveCommand = new RelayCommand<string>(Remove);
OverCommand = new RelayCommand(Over);
baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
@ -91,10 +103,43 @@ namespace SlnMesnac.WPF.ViewModel
}
/// <summary>
/// 主动移除
/// </summary>
private void Remove(string staffId)
{
MainWindowViewModel.wins = 2;
if (isUse == false)
{
var removeConfirmWin = new RemoveConfirmWin();
removeConfirmWin.Owner = Application.Current.MainWindow;
removeConfirmWin.WindowStartupLocation = WindowStartupLocation.CenterOwner;
removeConfirmWin.ShowDialog();
if (RemoveConfirmViewModel.times == 1)
{
var theUser = baseStaffService.GetStaffInfoByStaffId(staffId);
_rfidHandleBusniess.HandleAndInsertStaffAttendance(theUser, 2);
var list = _rfidHandleBusniess.HandleAndInsertStaffRealTime(theUser, 2);
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
RecordStaffRealTimeDataGrid.Clear();
list.ForEach(item => { RecordStaffRealTimeDataGrid.Add(item); });
}));
}
EmployeeLoginViewModel._transmitToRemoveConfigAction -= _transmitToRemoveConfigAction;
}
else
{
MessageBox.Show("正在打卡不能强退!");
}
}
private void Init()
{
hidUtils.Initial();
hidUtils.pushReceiveDataEvent += (bytes, str) =>
{
if (MainWindowViewModel.wins == 1)
{
string cleanStr = str.ToString().Replace(" ", "");
StatusText = StaffIdText = CheckStatus = null;
@ -105,10 +150,10 @@ namespace SlnMesnac.WPF.ViewModel
// Additional logic for processing the unique string goes here
if (isUse)
{
BaseStaffInfo user = baseStaffService.GetStaffInfoByCardId(cleanStr);
user = baseStaffService.GetStaffInfoByCardId(cleanStr);
if (user != null)
{
RecordStaffAttendance recordStaffAttendance = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(user.StaffId);
RecordStaffAttendance recordStaffAttendance = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(user.StaffId, RfidHandleBusniess.stationCode);
if (recordStaffAttendance != null)
{
var createTime = recordStaffAttendance.CreateTime;
@ -118,7 +163,7 @@ namespace SlnMesnac.WPF.ViewModel
{
if (recordStaffAttendance.AttendanceType == "1") //下班卡
{
if (recordStaffAttendance.AttendanceType == status.ToString())
if (recordStaffAttendance.AttendanceType == status.ToString() || recordStaffAttendance.AttendanceType == "2")
{
StatusText = "未打上班卡,请联系管理员!";
}
@ -132,11 +177,12 @@ namespace SlnMesnac.WPF.ViewModel
}
StaffIdText = user.StaffId;
CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!";
var list = _rfidHandleBusniess.HandleAndInsertStaffAttendance(user, isCheckOn);
_rfidHandleBusniess.HandleAndInsertStaffAttendance(user, isCheckOn);
var list = _rfidHandleBusniess.HandleAndInsertStaffRealTime(user, isCheckOn);
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
RecordStaffAttendanceDataGrid.Clear();
list.ForEach(item => { RecordStaffAttendanceDataGrid.Add(item); });
RecordStaffRealTimeDataGrid.Clear();
list.ForEach(item => { RecordStaffRealTimeDataGrid.Add(item); });
}));
_rfidHandleBusniess.HandleStaffCommute(user, isCheckOn);
}
@ -146,11 +192,12 @@ namespace SlnMesnac.WPF.ViewModel
{
StaffIdText = user.StaffId;
CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!";
var list = _rfidHandleBusniess.HandleAndInsertStaffAttendance(user, isCheckOn);
_rfidHandleBusniess.HandleAndInsertStaffAttendance(user, isCheckOn);
var list = _rfidHandleBusniess.HandleAndInsertStaffRealTime(user, isCheckOn);
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
RecordStaffAttendanceDataGrid.Clear();
list.ForEach(item => { RecordStaffAttendanceDataGrid.Add(item); });
RecordStaffRealTimeDataGrid.Clear();
list.ForEach(item => { RecordStaffRealTimeDataGrid.Add(item); });
}));
_rfidHandleBusniess.HandleStaffCommute(user, isCheckOn);
}
@ -164,11 +211,12 @@ namespace SlnMesnac.WPF.ViewModel
{
StaffIdText = user.StaffId;
CheckStatus = "打卡成功!";
var list = _rfidHandleBusniess.HandleAndInsertStaffAttendance(user, isCheckOn);
_rfidHandleBusniess.HandleAndInsertStaffAttendance(user, isCheckOn);
var list = _rfidHandleBusniess.HandleAndInsertStaffRealTime(user, isCheckOn);
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
RecordStaffAttendanceDataGrid.Clear();
list.ForEach(item => { RecordStaffAttendanceDataGrid.Add(item); });
RecordStaffRealTimeDataGrid.Clear();
list.ForEach(item => { RecordStaffRealTimeDataGrid.Add(item); });
}));
_rfidHandleBusniess.HandleStaffCommute(user, isCheckOn);
}
@ -178,13 +226,21 @@ namespace SlnMesnac.WPF.ViewModel
StaffIdText = "未配置";
CheckStatus = "没有匹配的员工,打卡失败!";
}
TransmitUserDelegateEvent?.Invoke(user);
}
}
else
{
StaffIdText = "已打卡,请勿重复!";
}
}
else if (MainWindowViewModel.wins == 2)
{
_transmitToRemoveConfigAction(str);
}
else if (MainWindowViewModel.wins == 3)
{
}
};
}
@ -308,12 +364,12 @@ namespace SlnMesnac.WPF.ViewModel
/// <summary>
/// DataGrid
/// </summary>
private ObservableCollection<RecordStaffAttendance> recordStaffAttendanceDataGrid = new ObservableCollection<RecordStaffAttendance>();
private ObservableCollection<RecordStaffRealTime> recordStaffRealTimeDataGrid = new ObservableCollection<RecordStaffRealTime>();
public ObservableCollection<RecordStaffAttendance> RecordStaffAttendanceDataGrid
public ObservableCollection<RecordStaffRealTime> RecordStaffRealTimeDataGrid
{
get { return recordStaffAttendanceDataGrid; }
set { recordStaffAttendanceDataGrid = value; OnPropertyChanged("RecordStaffAttendanceDataGrid"); }
get { return recordStaffRealTimeDataGrid; }
set { recordStaffRealTimeDataGrid = value; OnPropertyChanged("RecordStaffRealTimeDataGrid"); }
}
#endregion
@ -341,6 +397,7 @@ namespace SlnMesnac.WPF.ViewModel
CheckInButtonText = "上班打卡";
IsCheckOutButtonEnabled = "True"; // Enable CheckOutButton
CheckOutButtonColor = "#009999";
TransmitUserDelegateEvent?.Invoke();
hidUtils.StopScan();
isCheckOn = 1;
isUse = false;

@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Components.Forms;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Protocols;
using SlnMesnac.Business;
using SlnMesnac.Business.business;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
@ -32,20 +33,22 @@ namespace SlnMesnac.WPF.ViewModel
public ObservableCollection<string> PlanCodeComboBoxItems { get; set; }
public ObservableCollection<string> MaterialNameComboBoxItems { get; set; }
private RfidHandleBusniess _RfidHandleBusniess;
private DatabaseHandleBusniess _databaseHandleBusniess;
private ProdPlanInfoService _prodPlanInfoService;
private List<ProdPLanInfo> prodPlanInfos;
private ProdPlanDetailService _prodPlanDetailService;
private IRecordStaffAttendanceService _recordStaffAttendanceService;
private IBaseStaffService _baseStaffService;
private string StationCode;
private string DeviceCode;
private string ProcessCode;
public static bool isComplete = true;
private ProdPLanInfo pLanInfo;
private SerialPortBusiness _serialPortBusiness;
private string executeText = "待执行";
private int isSearch = 0;
/// <summary>
/// 按钮文字转换事件
/// </summary>
public event PropertyChangedEventHandler PropertyChanged = delegate { };
#region 定义命令
/// <summary>
/// 检索命令
/// </summary>
@ -70,171 +73,19 @@ namespace SlnMesnac.WPF.ViewModel
/// 执行命令
/// </summary>
public ICommand ExecuteCommand { get; private set; }
#region 委托
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
public static event RefreshDelegate? RefreshEvent;
#endregion
public ExecuteViewModel()
{
_prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>();
_prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
_RfidHandleBusniess = App.ServiceProvider.GetService<RfidHandleBusniess>();
_baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.SetBasePath(System.AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = configurationBuilder.Build();
pLanInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions("", "", "", "", "1").FirstOrDefault();
Refresh(pLanInfo);
// 从配置文件中获取ProductLineNameTextBlock的值
stationTextBlock = configuration.GetSection("AppConfig")["ProductLineName"];
StationCode = configuration.GetSection("AppConfig")["ProductLineCode"];
HandoverCommand = new RelayCommand(Handover);
ProductionReportCommand = new RelayCommand(ProductionReport);
TechnologicalInformationCommand = new RelayCommand(TechnologicalInformation);
SearchCommand = new RelayCommand(Search);
ExecuteCommand = new RelayCommand(Execute);
ProductionReportViewModel.RefreshDelegateEvent += Refresh;
EmployeeLoginViewModel.TransmitUserDelegateEvent += ShowTeamMember;
}
#region 定义委托
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
public static event RefreshDelegate? RefreshEvent;
/// <summary>
/// 换班弹窗
/// 按钮文字转换事件
/// </summary>
private void Handover()
{
var handOverWin = new HandOverWin();
handOverWin.Owner = Application.Current.MainWindow; // 设置父窗口为当前主窗口
handOverWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 让窗体出现在屏幕中央
handOverWin.ShowDialog();//窗体出现后禁止后面的用户控件
public event PropertyChangedEventHandler PropertyChanged = delegate { };
#endregion
}
/// <summary>
/// 报工弹窗
/// </summary>
private void ProductionReport()
{
var reportWin = new ProductionReportWin();
reportWin.Owner = Application.Current.MainWindow; // 设置父窗口为当前主窗口
reportWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 让窗体出现在屏幕中央
reportWin.ShowDialog();//窗体出现后禁止后面的用户控件
}
/// <summary>
/// 工艺信息弹窗,单例模式保证只显示一个
/// </summary>
private static TechnologicalWin instance;
private void TechnologicalInformation()
{
if (instance == null)
{
instance = new TechnologicalWin();
instance.WindowStartupLocation = WindowStartupLocation.CenterScreen;
instance.Closed += (sender, e) => { instance = null; }; // 窗口关闭时重置instance为null以便下次可以重新打开窗口
instance.Show();
}
else
{
instance.Focus(); // 如果窗口已经存在,则将焦点放在该窗口上
}
}
/// <summary>
/// 检索事件
/// </summary>
private void Search()
{
// 在这里执行其他操作可以通过InputText获取用户输入的信息
//Console.WriteLine("用户输入的信息:" + OrderCodeTextBox + PlanCodeTextBox + MaterialCodeTextBox);
//ProductLineNameTextBlock = ConfigurationManager.AppSettings["ProductLineNameTextBlock"];
List<ProdPLanInfo> list = _prodPlanInfoService.GetRecordStaffAttendancesByConditions(OrderCodeTextBox, PlanCodeTextBox, MaterialCodeTextBox, StationCode,"0");
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
ProdPLanInfoDataGrid.Clear();
list.ForEach(item =>
{
ProdPLanInfoDataGrid.Add(item);
});
}));
}
/// <summary>
/// 新增的执行事件
/// </summary>
private void Execute()
{
//判断是否有班组当班,查询打卡记录表4小时内最后一次打卡类型为上班的班组
if(EmployeeLoginViewModel.isOnDuty == true)
{
if (isComplete)//判断是否完成,未完成不能执行其他工单
{
// 将当前记录存为实体可以通过parameter获取当前记录的信息
string orderCode = _selectedRow.OrderCode.ToString();
string planCode = _selectedRow.PlanCode.ToString();
pLanInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions(orderCode, planCode, "", "", "0").First();
RecordStaffAttendance currentRecord = _recordStaffAttendanceService.GetLastestOnRecord();
BaseStaffInfo staffInfo = _baseStaffService.GetMonitorByTeamCode(currentRecord.TeamCode);
RecordStaffAttendance nextRecord = _recordStaffAttendanceService.GetLastestOffRecord();
// 向detail表里插入一条数据
ProdPlanDetail prodPlanDetail = new ProdPlanDetail
{
PlanCode = pLanInfo.PlanCode,
MaterialCode = pLanInfo.MaterialCode,
PlanAmount = pLanInfo.PlanAmount,
CompleteAmount = pLanInfo.CompleteAmount,
BeginTime = DateTime.Now.ToString(),
CurrentStaffId = staffInfo.StaffId
//NextStaffId = nextRecord.StaffId,
};
_prodPlanDetailService.Insert(prodPlanDetail);
//按钮文字变成执行中并锁定,其他的订单执行按钮也禁用
pLanInfo.BeginTime = DateTime.Now.ToString();
pLanInfo.PlanStatus = "1";
_prodPlanInfoService.Update(pLanInfo);
Search();
//查明细表显示出来
Refresh(pLanInfo);
isComplete = false;
}
}
}
//刷新明细
private void Refresh(ProdPLanInfo pLanInfo)
{
if(pLanInfo != null)
{
ProdPlanDetail planDetail = _prodPlanDetailService.GetPlanDetailsByPlanCode(pLanInfo.PlanCode);
PlanCodeText = planDetail.PlanCode;
OrderCodeText = pLanInfo.OrderCode;
MaterialCodeText = planDetail.MaterialCode;
StationCodeText = pLanInfo.StationCode;
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
ProdPLanDetailDataGrid.Clear();
ProdPLanDetailDataGrid.Add(planDetail);
}));
}
}
/// <summary>
/// 显示班组成员
/// </summary>
/// <param name="baseStaffInfo"></param>
private void ShowTeamMember(BaseStaffInfo baseStaffInfo)
{
if(baseStaffInfo != null)
{
TeamMember = _RfidHandleBusniess.SpliceTeamMember(baseStaffInfo);
}
}
#region
#region 定义属性
/// <summary>
/// 班组成员
/// </summary>
@ -359,6 +210,216 @@ namespace SlnMesnac.WPF.ViewModel
}
#endregion
public ExecuteViewModel()
{
_prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>();
_prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
_RfidHandleBusniess = App.ServiceProvider.GetService<RfidHandleBusniess>();
_baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
_serialPortBusiness = App.ServiceProvider.GetService<SerialPortBusiness>();
_databaseHandleBusniess = App.ServiceProvider.GetService<DatabaseHandleBusniess>();
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.SetBasePath(System.AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = configurationBuilder.Build();
pLanInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions("", "", "", "", "1").FirstOrDefault();
Refresh(pLanInfo);
// 从配置文件中获取ProductLineNameTextBlock的值
stationTextBlock = configuration.GetSection("AppConfig")["ProductLineName"];
StationCode = configuration.GetSection("AppConfig")["StationCode"];
RfidHandleBusniess.stationCode = StationCode;
DeviceCode = configuration.GetSection("AppConfig")["DeviceCode"];
ProcessCode = configuration.GetSection("AppConfig")["ProcessCode"];
HandoverCommand = new RelayCommand(Handover);
ProductionReportCommand = new RelayCommand(ProductionReport);
TechnologicalInformationCommand = new RelayCommand(TechnologicalInformation);
SearchCommand = new RelayCommand(Search);
ExecuteCommand = new RelayCommand(Execute);
ProductionReportViewModel.RefreshDelegateEvent += Refresh;
EmployeeLoginViewModel.TransmitUserDelegateEvent += ShowTeamMember;
//SerialPortBusiness.ReceivedBarcodeInfoEvent += HandleOrderCode;
MainWindowViewModel.TransferOrderCodeEvent += HandleOrderCode;
}
/// <summary>
/// 换班弹窗
/// </summary>
private void Handover()
{
var handOverWin = new HandOverWin();
handOverWin.Owner = Application.Current.MainWindow; // 设置父窗口为当前主窗口
handOverWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 让窗体出现在屏幕中央
handOverWin.ShowDialog();//窗体出现后禁止后面的用户控件
}
/// <summary>
/// 报工弹窗
/// </summary>
private void ProductionReport()
{
MainWindowViewModel.wins = 3;
var reportWin = new ProductionReportWin();
reportWin.Owner = Application.Current.MainWindow; // 设置父窗口为当前主窗口
reportWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 让窗体出现在屏幕中央
reportWin.ShowDialog();//窗体出现后禁止后面的用户控件
}
/// <summary>
/// 工艺信息弹窗,单例模式保证只显示一个
/// </summary>
private static TechnologicalWin instance;
private void TechnologicalInformation()
{
if (instance == null)
{
instance = new TechnologicalWin();
instance.WindowStartupLocation = WindowStartupLocation.CenterScreen;
instance.Closed += (sender, e) => { instance = null; }; // 窗口关闭时重置instance为null以便下次可以重新打开窗口
instance.Show();
}
else
{
instance.Focus(); // 如果窗口已经存在,则将焦点放在该窗口上
}
}
/// <summary>
/// 检索事件
/// </summary>
private void Search()
{
if (EmployeeLoginViewModel.isOnDuty == true)
{
//在这里执行其他操作可以通过InputText获取用户输入的信息
//Console.WriteLine("用户输入的信息:" + OrderCodeTextBox + PlanCodeTextBox + MaterialCodeTextBox);
//ProductLineNameTextBlock = ConfigurationManager.AppSettings["ProductLineNameTextBlock"];
List<ProdPLanInfo> list = _prodPlanInfoService.GetRecordStaffAttendancesByConditions(OrderCodeTextBox, PlanCodeTextBox, MaterialCodeTextBox, StationCode, "0");
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
ProdPLanInfoDataGrid.Clear();
list.ForEach(item =>
{
ProdPLanInfoDataGrid.Add(item);
});
}));
isSearch = 1;
}
else
{
MessageBox.Show("没有班组上班,请先打卡上班!");
}
}
/// <summary>
/// 根据订单单号判断是否存在,
/// </summary>
private void HandleOrderCode(string orderCode)
{
if (isComplete)
{
if (isSearch == 1)
{
//判断当前工位的工单编号是否存在
var plan = _prodPlanInfoService.GetProdPLanInfoByOrderCode(StationCode, orderCode);
if (plan == null)//不存在就在生产工单表中新增一条当前工位的订单且执行状态改为4,重新检索,并高亮这条工单,执行按钮可用
{
_databaseHandleBusniess.AddNewPlanInfo(orderCode,StationCode,DeviceCode,ProcessCode,"0");
}
else//存在将本条数据的执行状态改为4高亮这条工单执行按钮可用
{
_databaseHandleBusniess.UpdatePlanStatus(orderCode,StationCode,DeviceCode,ProcessCode,"4");
}
Search();
}
else
{
MessageBox.Show("请先检索工单!");
}
}
else
{
MessageBox.Show("请先完成当前工单!");
}
}
/// <summary>
/// 新增的执行事件
/// </summary>
private void Execute()
{
//判断是否有班组当班,查询打卡记录表4小时内最后一次打卡类型为上班的班组
if(EmployeeLoginViewModel.isOnDuty == true)
{
if (isComplete)//判断是否完成,未完成不能执行其他工单
{
// 将当前记录存为实体可以通过parameter获取当前记录的信息
string orderCode = _selectedRow.OrderCode.ToString();
string planCode = _selectedRow.PlanCode.ToString();
pLanInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions(orderCode, planCode, "", "", "0").First();
RecordStaffAttendance currentRecord = _recordStaffAttendanceService.GetLastestOnRecord();
BaseStaffInfo staffInfo = _baseStaffService.GetMonitorByTeamCode(currentRecord.TeamCode);
RecordStaffAttendance nextRecord = _recordStaffAttendanceService.GetLastestOffRecord();
// 向detail表里插入一条数据
ProdPlanDetail prodPlanDetail = new ProdPlanDetail
{
PlanCode = pLanInfo.PlanCode,
MaterialCode = pLanInfo.MaterialCode,
PlanAmount = pLanInfo.PlanAmount,
CompleteAmount = pLanInfo.CompleteAmount,
BeginTime = DateTime.Now.ToString(),
CurrentStaffId = staffInfo.StaffId
//NextStaffId = nextRecord.StaffId,
};
_prodPlanDetailService.Insert(prodPlanDetail);
//按钮文字变成执行中并锁定,其他的订单执行按钮也禁用
pLanInfo.BeginTime = DateTime.Now.ToString();
pLanInfo.PlanStatus = "1";
_prodPlanInfoService.Update(pLanInfo);
Search();
//查明细表显示出来
Refresh(pLanInfo);
isComplete = false;
}
else
{
MessageBox.Show("请先完成当前工单!");
}
}
}
//刷新明细
private void Refresh(ProdPLanInfo pLanInfo)
{
if(pLanInfo != null)
{
ProdPlanDetail planDetail = _prodPlanDetailService.GetPlanDetailsByPlanCode(pLanInfo.PlanCode);
if (planDetail != null)
{
PlanCodeText = planDetail.PlanCode;
OrderCodeText = pLanInfo.OrderCode;
MaterialCodeText = planDetail.MaterialCode;
StationCodeText = pLanInfo.StationCode;
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
ProdPLanDetailDataGrid.Clear();
ProdPLanDetailDataGrid.Add(planDetail);
}));
}
}
}
/// <summary>
/// 显示班组成员
/// </summary>
/// <param name="baseStaffInfo"></param>
private void ShowTeamMember()
{
TeamMember = _RfidHandleBusniess.SpliceTeamMember();
}
public void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

@ -44,6 +44,7 @@ namespace SlnMesnac.WPF.ViewModel
HandoverCommand = new RelayCommand(Handover);
Init();
_baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
}
/// <summary>
@ -55,60 +56,62 @@ namespace SlnMesnac.WPF.ViewModel
{
planDetail = _prodPlanDetailService.GetPlanDetailsByPlanCode(planInfo.PlanCode);
//_recordStaffAttendanceService.GetLastestOffRecord();
PlanAmountText = planDetail.PlanAmount.ToString();
CompleteAmountText = planDetail.CompleteAmount.ToString();
var hidUtils = EmployeeLoginViewModel.hidUtils;
//PlanAmountText = planDetail.PlanAmount.ToString();
//CompleteAmountText = planDetail.CompleteAmount.ToString();
//hidUtils.Initial();
hidUtils.StartScan();
hidUtils.pushReceiveDataEvent += (bytes, str) =>
{
if (times < 2)//打卡超过2次无效
{
str = str.ToString().Replace(" ", "");
BaseStaffInfo user = _baseStaffService.GetStaffInfoByCardId(str);
if (user != null)
{
string staffType = user.StaffType;
if (staffType == "1")//判断是否为班长
{
if (times == 0 && planDetail.CurrentStaffId == user.StaffId)
{
//显示记录
StaffIdText = user.StaffId;
StaffNameText = user.StaffName;
StaffTypeText = user.StaffType;
TeamCodeText = user.TeamCode;
//数量+1
times++;
}
else if (times == 1)
{
StaffIdText = user.StaffId;
//判断是否为下一班组长
planDetail.CurrentStaffId = user.StaffId;
StaffNameText = user.StaffName;
StaffTypeText = user.StaffType;
TeamCodeText = user.TeamCode;
_prodPlanDetailService.Insert(planDetail);//更换班组长后插入一条明细记录
//数量+1
times++;
}
else
{
HintText = "当前班组长先打卡!";
}
}
else
{
HintText = "打卡人员非班长,打卡无效!";
}
}
else
{
HintText = "没有匹配的员工,打卡失败!";
}
}
};
//EmployeeLoginViewModel.hidUtils.StartScan();
//EmployeeLoginViewModel.hidUtils.pushReceiveDataEvent += (bytes, str) =>
//{
// if (MainWindowViewModel.wins == 3)
// {
// if (times < 2)//打卡超过2次无效
// {
// str = str.ToString().Replace(" ", "");
// BaseStaffInfo user = _baseStaffService.GetStaffInfoByCardId(str);
// if (user != null)
// {
// string staffType = user.StaffType;
// if (staffType == "1")//判断是否为班长
// {
// if (times == 0 && planDetail.CurrentStaffId == user.StaffId)
// {
// //显示记录
// StaffIdText = user.StaffId;
// StaffNameText = user.StaffName;
// StaffTypeText = user.StaffType;
// TeamCodeText = user.TeamCode;
// //数量+1
// times++;
// }
// else if (times == 1)
// {
// StaffIdText = user.StaffId;
// //判断是否为下一班组长
// planDetail.CurrentStaffId = user.StaffId;
// StaffNameText = user.StaffName;
// StaffTypeText = user.StaffType;
// TeamCodeText = user.TeamCode;
// _prodPlanDetailService.Insert(planDetail);//更换班组长后插入一条明细记录
// //数量+1
// times++;
// }
// else
// {
// HintText = "当前班组长先打卡!";
// }
// }
// else
// {
// HintText = "打卡人员非班长,打卡无效!";
// }
// }
// else
// {
// HintText = "没有匹配的员工,打卡失败!";
// }
// }
// }
//};
}
}
@ -205,7 +208,9 @@ namespace SlnMesnac.WPF.ViewModel
if(times == 2)
{
//在工单明细插入一条,记录两个班长
EmployeeLoginViewModel.hidUtils.StopScan();
//关闭窗口
MainWindowViewModel.wins = 1;
Application.Current.Windows.OfType<HandOverWin>().First().Close();
}
else

@ -1,8 +1,10 @@
using ConsoleApp;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using SlnMesnac.Business;
using SlnMesnac.Business.business;
using SlnMesnac.Common;
using SlnMesnac.Repository.service;
@ -10,11 +12,13 @@ using SlnMesnac.WPF.Page;
using SlnMesnac.WPF.Page.Generate;
using System;
using System.ComponentModel;
using System.IO.Ports;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Threading;
namespace SlnMesnac.WPF.ViewModel
@ -31,6 +35,18 @@ namespace SlnMesnac.WPF.ViewModel
private System.Timers.Timer timer;
public delegate void UIDCodeDelegate(string code);
public event UIDCodeDelegate UIDCodeDelegateEvent;
private SerialPortBusiness serialPortBusiness;
private string serialPort;
private int baudRate;
private int parity;
private int dataBits;
private int stopBits;
public static int wins = 1;//1为人员登录2为强退确认3为交接换班
#region 委托定义
public delegate void TransferOrderCode(string orderCode);
public static event TransferOrderCode? TransferOrderCodeEvent;
#endregion
#region 参数定义
///// <summary>
@ -53,18 +69,36 @@ namespace SlnMesnac.WPF.ViewModel
// set { _clockStatus = value; RaisePropertyChanged(nameof(ClockStatus)); }
//}
///// <summary>
///// 扫码枪状态
///// </summary>
//private int _codeGunStatus = 0;
//public int CodeGunStatus
//{
// get { return _codeGunStatus; }
// set { _codeGunStatus = value; RaisePropertyChanged(nameof(CodeGunStatus)); }
//}
/// <summary>
/// 扫码枪状态
/// </summary>
private int _codeGunStatus = 0;
public int CodeGunStatus
{
get { return _codeGunStatus; }
set
{
_codeGunStatus = value;
OnPropertyChanged("CodeGunStatus");
}
}
/// <summary>
/// 订单号框
/// </summary>
private string orderCodeText;
public string OrderCodeText
{
get { return orderCodeText; }
set
{
orderCodeText = value;
OnPropertyChanged("OrderCodeText");
}
}
public System.Windows.Controls.UserControl _content;
public System.Windows.Controls.UserControl UserContent
{
get { return _content; }
@ -92,13 +126,38 @@ namespace SlnMesnac.WPF.ViewModel
/// 窗体控制
/// </summary>
public RelayCommand<object> FormControlCommand { get; set; }
/// <summary>
/// 连接
/// </summary>
public ICommand ConnectCommand { get; set; }
/// <summary>
/// 断开
/// </summary>
public ICommand BreakCommand { get; set; }
/// <summary>
/// 确认
/// </summary>
public ICommand ConfirmCommand { get; set; }
#endregion
public MainWindowViewModel()
{
//UserContent = _employeeLoginPage;
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.SetBasePath(System.AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = configurationBuilder.Build();
serialPort = configuration.GetSection("AppConfig")["serialPort"];
baudRate = Convert.ToInt32(configuration.GetSection("AppConfig")["baudRate"]);
parity = Convert.ToInt32(configuration.GetSection("AppConfig")["parity"]);
dataBits = Convert.ToInt32(configuration.GetSection("AppConfig")["dataBits"]);
stopBits = Convert.ToInt32(configuration.GetSection("AppConfig")["stopBits"]);
UserContent = _executePage;
_logger = App.ServiceProvider.GetService<ILogger<MainWindowViewModel>>();
serialPortBusiness = App.ServiceProvider.GetService<SerialPortBusiness>();
var info = App.ServiceProvider.GetService<StringChange>();
ControlOnClickCommand = new RelayCommand<object>(obj => ControlOnClick(obj));
OpenSystemKeyboardCommand = new RelayCommand<object>(obj => OpenSystemKeyboard(obj));
@ -106,6 +165,24 @@ namespace SlnMesnac.WPF.ViewModel
timer = new System.Timers.Timer(1000); // 1 second interval
timer.Elapsed += Timer_Tick;
timer.Enabled = true;
this.Init();
ConnectCommand = new RelayCommand(OpenSerialPort);
BreakCommand = new RelayCommand(CloseSerialPort);
ConfirmCommand = new RelayCommand(Confirm);
SerialPortBusiness.ReceivedBarcodeInfoEvent += info =>
{
info = OrderCodeText;
};
}
/// <summary>
/// 确认
/// </summary>
/// <exception cref="NotImplementedException"></exception>
private void Confirm()
{
string orderCode = OrderCodeText;
TransferOrderCodeEvent?.Invoke(orderCode);
}
/// <summary>
@ -113,7 +190,7 @@ namespace SlnMesnac.WPF.ViewModel
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
#region 参数
#region 定义参数
/// <summary>
/// 当前时间
/// </summary>
@ -123,6 +200,13 @@ namespace SlnMesnac.WPF.ViewModel
get { return _currentTimeText; }
set { _currentTimeText = value; OnPropertyChanged("CurrentTimeText"); }
}
private int _serialPortDeviceStatus = 0;
public int SerialPortDeviceStatus
{
get { return _serialPortDeviceStatus; }
set { _serialPortDeviceStatus = value; OnPropertyChanged("SerialPortDeviceStatus"); }
}
#endregion
/// <summary>
@ -172,6 +256,81 @@ namespace SlnMesnac.WPF.ViewModel
}
}
/// <summary>
/// 初始串口
/// </summary>
private void Init()
{
this.serialPortBusiness.RefreshSerialPortDeviceStatusEvent += isFlag =>
{
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
SerialPortDeviceStatus = isFlag;
}));
};
}
/// <summary>
/// 打开串口
/// </summary>
private void OpenSerialPort()
{
try
{
this.GetParity(out int parity);
this.serialPortBusiness.OpenSerialPort(serialPort, baudRate, parity, dataBits, stopBits);
}
catch (Exception ex)
{
_logger.LogError($"打开串口通讯异常:{ex.Message}");
}
}
/// <summary>
/// 关闭串口
/// </summary>
private void CloseSerialPort()
{
try
{
this.serialPortBusiness.CloseSerialPort();
}
catch (Exception ex)
{
_logger.LogError($"关闭串口通讯异常:{ex.Message}");
}
}
/// <summary>
/// 转换校验位
/// </summary>
/// <param name="parity"></param>
private void GetParity(out int parity)
{
switch (serialPort)
{
case "None":
parity = 0;
break;
case "Odd":
parity = 1;
break;
case "Even":
parity = 2;
break;
case "Mark":
parity = 3;
break;
case "Space":
parity = 4;
break;
default:
parity = 0;
break;
}
}
/// <summary>
/// 打开系统键盘
/// </summary>

@ -1,5 +1,6 @@
using GalaSoft.MvvmLight.Command;
using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Business.business;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service;
using SlnMesnac.WPF.Views;
@ -19,6 +20,7 @@ namespace SlnMesnac.WPF.ViewModel
{
private ProdPlanInfoService _prodPlanInfoService;
private ProdPlanDetailService _prodPlanDetailService;
private DatabaseHandleBusniess _databaseHandleBusniess;
private ProdPLanInfo planInfo;
private ProdPlanDetail planDetail;
@ -37,6 +39,7 @@ namespace SlnMesnac.WPF.ViewModel
{
_prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>();
_prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>();
_databaseHandleBusniess = App.ServiceProvider.GetService<DatabaseHandleBusniess>();
ConfirmCommand = new RelayCommand(Confirm);
EndPlanCommand = new RelayCommand(EndPlan);
Init();
@ -54,7 +57,7 @@ namespace SlnMesnac.WPF.ViewModel
{
planDetail = _prodPlanDetailService.GetPlanDetailsByPlanCode(planInfo.PlanCode);
PlanAmountText = planDetail.PlanAmount.ToString();
CompleteAmountText = planDetail.CompleteAmount.ToString();
CompleteAmountText = planInfo.CompleteAmount.ToString();
}
else
{
@ -62,7 +65,7 @@ namespace SlnMesnac.WPF.ViewModel
}
}
#region
#region 定义属性
/// <summary>
/// 计划数量Text
/// </summary>
@ -130,13 +133,18 @@ namespace SlnMesnac.WPF.ViewModel
if (isNum)
{
//将新增产量加到实际产量中
double currentAmountDouble = Convert.ToDouble(planDetail.CompleteAmount);
double currentAmountDouble = Convert.ToDouble(planInfo.CompleteAmount);
double newAmountDouble = Convert.ToDouble(newAmount);
double result = currentAmountDouble + newAmountDouble;
planDetail.CompleteAmount = result.ToString();
planDetail.CompleteAmount = newAmountDouble.ToString();
planInfo.CompleteAmount = result.ToString();
_prodPlanDetailService.Update(planDetail);
planDetail.BatchNumber += 1;
planInfo.PlanStatus = "4";
//保存工单的执行人员
List<RecordStaffRealTime> realTimes = _databaseHandleBusniess.GetRecordStaffRealTimes();
_prodPlanDetailService.Insert(planDetail);
_prodPlanInfoService.Update(planInfo);
_databaseHandleBusniess.InsertPlanExecuteUser(planInfo, planDetail, realTimes);
Refresh();
NewAmountText = null;
HintText = "已提交!";
@ -168,7 +176,7 @@ namespace SlnMesnac.WPF.ViewModel
if (planDetail != null && planInfo != null)
{
planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_prodPlanDetailService.Update(planDetail);
_prodPlanDetailService.Insert(planDetail);
planInfo.PlanStatus = "2";
planInfo.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
double planAmountDouble = Convert.ToDouble(planDetail.PlanAmount);

@ -0,0 +1,106 @@
using ConsoleApp;
using GalaSoft.MvvmLight.Command;
using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service;
using SlnMesnac.WPF.Views;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace SlnMesnac.WPF.ViewModel
{
public class RemoveConfirmViewModel : INotifyPropertyChanged
{
private IBaseStaffService _baseStaffService;
private IRecordStaffAttendanceService _recordStaffAttendanceService;
public static int times = 0;
/// <summary>
/// 按钮文字转换事件
/// </summary>
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#region 定义属性
/// <summary>
/// 提示信息
/// </summary>
private string hintText;
public string HintText
{
get { return hintText; }
set { hintText = value; OnPropertyChanged("HintText"); }
}
#endregion
public RemoveConfirmViewModel()
{
HintText = "";
times = 0;
_baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
Init();
ConfirmCommand = new RelayCommand(Confirm);
}
/// <summary>
/// 初始化
/// </summary>
private void Init()
{
//hidUtils.Initial();
EmployeeLoginViewModel.hidUtils.StartScan();
EmployeeLoginViewModel._transmitToRemoveConfigAction += (str) =>
{
if (MainWindowViewModel.wins == 2)
{
str = str.ToString().Replace(" ", "");
BaseStaffInfo user = _baseStaffService.GetStaffInfoByCardId(str);
if (times < 1)
{
if (user != null)
{
string staffType = user.StaffType;
if (staffType == "1")//判断是否为班长,判断后续是否为当前班组的班长
{
HintText = "成功!";
times++;
}
else
{
HintText = "非班组长,无效!";
}
}
else
{
HintText = "没有匹配的员工,打卡失败!";
}
}
}
};
}
/// <summary>
/// 确认
/// </summary>
public ICommand ConfirmCommand { get; private set; }
private void Confirm()
{
//在工单明细插入一条,记录两个班长
EmployeeLoginViewModel.hidUtils.StopScan();
//关闭窗口
Application.Current.Windows.OfType<RemoveConfirmWin>().First().Close();
MainWindowViewModel.wins = 1;
}
}
}

@ -0,0 +1,29 @@
<Window x:Class="SlnMesnac.WPF.Views.RemoveConfirmWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SlnMesnac.WPF.Views"
WindowStartupLocation="CenterOwner" Background="White" ResizeMode="NoResize" FontWeight="ExtraLight"
mc:Ignorable="d"
Title="RemoveConfirmWin" Height="350" Width="600">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="0">
<TextBlock Text="请班组长打卡确认!" FontSize="30" FontWeight="Bold" Foreground="#1254AB" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="25,0,0,0"/>
</Border>
<Border Grid.Row="1" BorderBrush="#1254AB" BorderThickness="2" CornerRadius="5" Margin="20,10,20,10">
<Border.Effect>
<DropShadowEffect Color="#1254AB" Direction="270" BlurRadius="10" ShadowDepth="5" Opacity="0.5"/>
</Border.Effect>
<TextBlock Text="{Binding HintText}" FontSize="20" Foreground="Red" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
<Border Grid.Row="2">
<Button Content="确认" x:Name="ProductionReport" Command="{Binding ConfirmCommand}" CommandParameter="{Binding Name,ElementName=Select}" Style="{StaticResource BUTTON_AGREE}" FontSize="20" FontWeight="Bold" Background="#FFDC870B" BorderBrush="#FFDC870B" HorizontalAlignment="Right" Margin="0,56,10,10" Width="100"/>
</Border>
</Grid>
</Window>

@ -0,0 +1,29 @@
using SlnMesnac.WPF.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace SlnMesnac.WPF.Views
{
/// <summary>
/// RemoveConfirmWin.xaml 的交互逻辑
/// </summary>
public partial class RemoveConfirmWin : Window
{
public RemoveConfirmWin()
{
InitializeComponent();
this.DataContext = new RemoveConfirmViewModel();
}
}
}

@ -14,7 +14,7 @@
{
"configId": "mes",
"dbType": 1,
"connStr": "server=121.37.164.0;uid=sa;pwd=Yq123456;database=xmxs_os"
"connStr": "server=119.45.202.115;uid=sa;pwd=haiwei@123;database=xmxs_os"
}
//{
// "configId": "mcs",
@ -56,8 +56,15 @@
"isFlage": true
}
],
"serialPort": "COM3",
"baudRate": 9600,
"dataBits": 8,
"stopBits": 1,
"parity": 0,
"redisConfig": "175.27.215.92:6379,password=redis@2023",
"StationCode": "1010",
"StationCode": "1020",
"DeviceCode": "XMGR0004",
"ProcessCode": "1002",
"ProductLineName": "压延一工位"
}
}

Loading…
Cancel
Save