Files
wcs/WCS.BLL/Manager/MXBackgroundThread.cs
2025-03-10 10:15:58 +08:00

365 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using SqlSugar;
using WCS.BLL.Config;
using WCS.BLL.DbModels;
using WCS.BLL.HardWare;
using WCS.BLL.Tool;
using WCS.DAL;
using WCS.DAL.Db;
using WCS.DAL.Db.AuthDb;
using WCS.DAL.DbModels;
using WCS.Model;
using WCS.Model.ApiModel.InOutRecord;
using WCS.Model.ApiModel.MXBackgroundThread;
namespace WCS.BLL.Manager
{
//盟讯公司后台方法
public static class MXBackgroundThread
{
public static void InitBackgroundThread()
{
//#region 定时任务:回传Mes入库出库
//Task.Run(() =>
//{
// while (true)
// {
// //每5秒同步一次
// Thread.Sleep(5000);
// try
// {
// var records = DbHelp.db.Queryable<InOutRecord>()
// .Where(t => t.OperateTime > DateTime.Now.AddDays(-3)) //只查询回传三天内数据
// .Where(t => t.IsUpload == false)
// .Includes(t => t.StoreInfo)
// .OrderBy(t => t.Id)
// .ToList();
// //入库记录上传
// var inventoryDetails = records.Where(t => t.Direction == DirectionEnum.入库)
// .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName)
// .ToList();
// if (inventoryDetails != null && inventoryDetails.Count > 0)
// {
// for (int i = 0; i < inventoryDetails.Count; i++)
// {
// try
// {
// //请求WMS上传入库记录
// var data = new InputStockInRequest
// {
// materialBar = inventoryDetails[i].MatSN,
// shelfCode = inventoryDetails[i].BigShelfCode,
// shelfX = "R" + inventoryDetails[i].R,
// shelfY = "C" + inventoryDetails[i].C,
// shelfZ = inventoryDetails[i].Wei,
// inUser = inventoryDetails[i].OperateUser,
// inTime = inventoryDetails[i].OperateTime.ToString("yyyy-MM-dd HH:mm:ss"),
// };
// Guid guid = Guid.NewGuid();
// var result = ApiHelp.GetDataFromHttp<ResponseCommon>(LocalFile.Config.InputStockInStr, data, "POST", true);
// if (result != null && (result.Code == 200))
// {
// //上传成功 更改上传状态
// inventoryDetails[i].IsUpload = true;
// DbHelp.db.Updateable(inventoryDetails[i]).ExecuteCommand();
// }
// }
// catch (Exception ex)
// {
// }
// Thread.Sleep(200);
// }
// }
// //出库记录上传
// var outRecord = records.Where(t => t.Direction == DirectionEnum.出库)
// .Where(t => !string.IsNullOrEmpty(t.OrderNumber))
// .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName)
// .ToList();
// if (outRecord != null && outRecord.Count > 0)
// {
// for (int i = 0; i < outRecord.Count; i++)
// {
// try
// {
// var retString = string.Empty;
// var data = new BunkerOutRequest()
// {
// materialBar = outRecord[i].MatSN,
// outType = 0,
// pickBillNumber = outRecord[i].OrderNumber,
// qty = outRecord[i].MatQty,
// };
// var result = ApiHelp.GetDataFromHttp<ResponseCommon>(LocalFile.Config.BunkerOutStr, data, "POST", true);
// //请求成功
// if (result != null && result.Code == 200)
// {
// //上传成功 更改上传状态
// outRecord[i].IsUpload = true;
// DbHelp.db.Updateable(outRecord[i]).ExecuteCommand();
// }
// }
// catch (Exception ex)
// {
// }
// Thread.Sleep(200);
// }
// }
// }
// catch (Exception ex)
// {
// Logs.Write("【定时任务】上传异常:" + ex.Message);
// }
// }
//});
//#endregion
#region 退
Task.Run(() =>
{
while (true)
{
//每10s一次
Thread.Sleep(10000);
try
{
#region
var inStoreShelf = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.)
.Where(t => DateTime.Now - t.SetCurrentModeTime >= TimeSpan.FromMinutes(3))
.ToList();
foreach (var shelf in inStoreShelf)
{
shelf.GoOutInstore();
Logs.Write($"【定时任务:定时退出模式】货架【{shelf.ShelfCode}】超时3min未退出入库模式系统后台自动退出");
}
#endregion
#region
//出库超过n分钟自动进入待机模式
var outStoreShelf = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.)
.Where(t => DateTime.Now - t.SetCurrentModeTime >= TimeSpan.FromMinutes(5))
.ToList();
foreach (var shelf in outStoreShelf)
{
Logs.Write($"【定时任务:定时退出模式】货架【{shelf.ShelfCode}】超时5min未退出出库模式系统后台自动退出出库单[{shelf.OrderNumber}]");
shelf.GoOutOutstore();
}
#endregion
#region
var stockTakingShelf = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.)
.Where(t => DateTime.Now - t.SetCurrentModeTime >= TimeSpan.FromMinutes(5))
.ToList();
foreach (var shelf in stockTakingShelf)
{
Logs.Write($"【定时任务:定时退出模式】货架【{shelf.ShelfCode}】超时5min未退出盘点模式系统后台自动退出盘点单[{shelf.OrderNumber}]");
shelf.GoOutStocktaking();
}
#endregion
}
catch (Exception e)
{
Logs.Write("【定时任务:定时退出模式】" + e.Message, LogsType.Info);
}
}
});
#endregion
//#region 定时任务:海康未扫物料码的物料更新数据
//Task.Run(() =>
//{
// while (true)
// {
// //间隔20秒同步一次
// Thread.Sleep(20000);
// try
// {
// var inventoryDetails = DbHelp.db.Queryable<InventoryDetail>()
// .Where(t => t.MatName == "暂时未知")
// .Where(t => t.InstoreTime > DateTime.Now.AddDays(-3))
// .ToList();
// if (inventoryDetails != null && inventoryDetails.Count > 0)
// {
// for (int i = 0; i < inventoryDetails.Count; i++)
// {
// try
// {
// //请求WMS获取物料的信息
// var request = new QueryBybarRequest()
// {
// materialBar = inventoryDetails[i].MatSN
// };
// var result = ApiHelp.GetDataFromHttp<QueryBybarResponse>(LocalFile.Config.QueryBybar, request, "POST", true);
// if (result != null && (result.code == 200) && result.data != null && result.data.Count() > 0)
// {
// //查询成功 更改数值
// var instoreDto = result.data.FirstOrDefault();
// inventoryDetails[i].MatCode = instoreDto.materialCode;
// inventoryDetails[i].MatName = instoreDto.materialName;
// inventoryDetails[i].MatBatch = instoreDto.batchNo;
// inventoryDetails[i].MatSpec = instoreDto.materialSpec;
// inventoryDetails[i].MatQty = (int)instoreDto.materialQty;
// DbHelp.db.Updateable(inventoryDetails[i]).ExecuteCommand();
// }
// }
// catch (Exception ex)
// {
// }
// Thread.Sleep(500);
// }
// }
// }
// catch (Exception ex)
// {
// Logs.Write("【定时任务】更新海康物料信息异常:" + ex.Message);
// }
// Thread.Sleep(3000);
// try
// {
// var inventoryDetails = DbHelp.db.Queryable<InventoryDetail>()
// .Where(t => t.WarehouseCode == null)
// .Where(t => t.InstoreTime > DateTime.Now.AddDays(-30))
// .ToList();
// if (inventoryDetails != null && inventoryDetails.Count > 0)
// {
// for (int i = 0; i < inventoryDetails.Count; i++)
// {
// try
// {
// var url = $"http://192.168.2.23:9213/integrate/hkwsInventoryDetail/selectMaterialBar?materialBar={inventoryDetails[i].MatSN}";
// var result = ApiHelp.GetDataFromHttp<SelectMaterialBarResponse>(url, null, "POST", false);
// if (result != null && result.code == 200 && result.data != null && !string.IsNullOrEmpty(result.data.warehouseCode))
// {
// //查询成功 更改数值
// inventoryDetails[i].WarehouseCode = result.data.warehouseCode;
// DbHelp.db.Updateable(inventoryDetails[i]).ExecuteCommand();
// }
// }
// catch (Exception ex)
// {
// Logs.Write("【定时任务】更新仓库代码异常:" + ex.Message);
// }
// Thread.Sleep(500);
// }
// }
// }
// catch (Exception ex)
// {
// }
// }
//});
//#endregion
#region
//判断灯颜色和模式是否对应
Task.Run(() =>
{
while (true)
{
//间隔5秒查询一次
Thread.Sleep(5000);
try
{
//待机模式未关灯
var shelves = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode. && t.LightColor != WarningLight.LightColorEnum.)
.Where(t => t.SetCurrentModeTime < DateTime.Now.AddSeconds(-5))
.ToList();
foreach (var shelf in shelves)
{
try
{
if (shelf is SmartShelf)
{
var smartShelf = (SmartShelf)shelf;
if(smartShelf.IsWarning == false)
{
smartShelf?.WarningLight.CloseLight(smartShelf.TcpCleint);
Logs.Write($"【定时任务】:监测警示灯关灯机制,关【{shelf.ShelfCode}】灯发送指令成功!");
}
}
}
catch (Exception ex)
{
Logs.Write($"【定时任务】:监测警示灯关灯机制,关【{shelf.ShelfCode}】灯发生异常" + ex.Message);
}
}
//出库模式未亮灯
var outShelves = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode. && t.LightColor == WarningLight.LightColorEnum.)
.Where(t => t.SetCurrentModeTime < DateTime.Now.AddSeconds(-5))
.ToList();
foreach (var shelf in outShelves)
{
try
{
if (shelf is SmartShelf)
{
var smartShelf = (SmartShelf)shelf;
smartShelf?.WarningLight.GreenLight(smartShelf.TcpCleint);
Logs.Write($"【定时任务】:监测警示灯关灯机制,出库开灯【{shelf.ShelfCode}】发送指令成功!");
}
}
catch (Exception ex)
{
Logs.Write($"【定时任务】:监测警示灯关灯机制,出库开灯【{shelf.ShelfCode}】发生异常" + ex.Message);
}
}
}
catch (Exception ex)
{
Logs.Write("【定时任务】:监测警示灯关灯机制发生异常" + ex.Message);
}
}
});
#endregion
}
/// <summary>
/// 发送钉钉消息
/// </summary>
/// <param name="msg">发送的消息内容</param>
/// <param name="errMsg">错误信息</param>
/// <param name="idList">工号列表</param>
/// <returns></returns>
public static bool SendDingDingMsg(string msg, List<string> idList, ref string errMsg)
{
try
{
#region
var list = AuthDbHelp.db.Queryable<UserBase>().Where(t => t.IsGCYF)
.Select(t => t.LoginName)
.ToList();
#endregion
string ids = string.Join(",", list);
string url = "http://192.168.2.23:9213/integrate/cmccMonitor/rateAlertByCMCC?" + $"context={msg}&messageType=软件管理平台&username={ids}";
#region
var Result = ApiHelp.GetDataFromHttp<MXMesResponseCommon>(url, null, "GET");
if (Result != null && Result.code != 200)
{
errMsg = Result.msg;
return false;
}
return true;
#endregion
}
catch (Exception ex)
{
errMsg = "接口调用失败";
return false;
}
}
}
}