Files
wcs/WCS.BLL/Manager/MXBackgroundThread.cs
hehaibing-1996 00621bcd55 1.增加盟讯公司业务逻辑相关适配 前后端增加配置参数“ISMX”进行控制
2.前端websocket取消心跳机制(原有心跳和断线重连当服务端网线断开后需要等tcp保活期到期后才能发现重连),自己实现心跳和重连
3.前端关闭后任占用后台线程问题修复
2024-05-25 17:25:27 +08:00

256 lines
12 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.Tool;
using WCS.DAL;
using WCS.DAL.Db;
using WCS.DAL.Db.AuthDb;
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 退
#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
#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;
}
}
}
}