1.增加盟讯公司业务逻辑相关适配 前后端增加配置参数“ISMX”进行控制

2.前端websocket取消心跳机制(原有心跳和断线重连当服务端网线断开后需要等tcp保活期到期后才能发现重连),自己实现心跳和重连
3.前端关闭后任占用后台线程问题修复
This commit is contained in:
hehaibing-1996
2024-05-25 17:25:27 +08:00
parent 472862a978
commit 00621bcd55
82 changed files with 3404 additions and 240 deletions

View File

@ -0,0 +1,255 @@
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;
}
}
}
}