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() .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(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(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() .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(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() .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(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 } /// /// 发送钉钉消息 /// /// 发送的消息内容 /// 错误信息 /// 工号列表 /// public static bool SendDingDingMsg(string msg, List idList, ref string errMsg) { try { #region 获取所有工程研发人员 var list = AuthDbHelp.db.Queryable().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(url, null, "GET"); if (Result != null && Result.code != 200) { errMsg = Result.msg; return false; } return true; #endregion } catch (Exception ex) { errMsg = "接口调用失败"; return false; } } } }