using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WCS.BLL.DbModels.Task; using WCS.BLL.DbModels; using WCS.BLL.HardWare; using WCS.DAL.Db.AuthDb; using WCS.DAL.Db; using WCS.DAL; using WCS.Model.ApiModel.InOutRecord; using WCS.Model.ApiModel.MXBackgroundThread; using WCS.Model; using WCS.BLL.Tool; using SqlSugar; using WCS.BLL.Config; using WCS.Model.ApiModel.MKYBackgroundThread; using System.Text.RegularExpressions; using System.Reflection; namespace WCS.BLL.Manager { public static class MKYBackgroundThread { public static void InitBackgroundThread() { #region 调用WMS接口获取具体的库存列表并展示在液晶标签上 #endregion #region 定时任务:回传数据至WMS系统 Task.Run(() => { while (true) { //回传数据的时间间隔 Thread.Sleep(2000); //先判断是否需要获取token if (string.IsNullOrEmpty(LocalStatic.WMSToken)) { try { Logs.Write($"【定时任务:回传数据至WMS系统】token为空 开始获取token", LogsType.Info); #region 登录获取token var request = new LoginRequest() { userName = "cmeimZtwcs", password = "Cmeim@ztwcs2024!@#" }; var result = ApiHelp.GetDataFromHttpShortTime(@"http://10.41.235.10:8989/login", request, "POST", true); if (result != null && (result.code == 200)) { //获取到最新的token LocalStatic.WMSToken = result.data; Logs.Write($"【定时任务:回传数据至WMS系统】调用接口获取token成功!token为{result.data}", LogsType.Info); } else if (result != null && (result.code == 500) && result.message.Contains("未查询到条码信息【")) { Logs.Write($"【定时任务:回传数据至WMS系统】调用接口获取token失败", LogsType.Info); } #endregion } catch (Exception ex) { Logs.Write($"【定时任务:回传数据至WMS系统】获取token异常" + ex.Message, LogsType.Info); Logs.Write($"【定时任务:回传数据至WMS系统】获取token异常" + ex.StackTrace, LogsType.Info); } } try { //获取已完成未提交的任务 var finsishedTaks = DbHelp.db.Queryable() .Where(t => t.FinishTime > DateTime.Now.AddDays(-1))//只上传1天内的 后续调整 .OrderBy(t => t.FinishTime) .ToList(); //循环进行上传 for (int i = 0; i < finsishedTaks.Count; i++) { var finishedTask = finsishedTaks[i]; try { //上传单据 #region 上传单据 var request = new SysOrderRequest() { guid = finishedTask.Guid.ToString(), itemNo = finishedTask.ItemNo, matCode = finishedTask.MatCode, matBatch = finishedTask.MatBatch, matSN = finishedTask.MatSN, orderNumber = finishedTask.OrderNumber, orderType = (int)finishedTask.TaskMode, storeCode = finishedTask.ModuleCode, qty = finishedTask.FinishQty }; var result = ApiHelp.GetDataFromHttp(@"http://10.41.235.10:8989/ztwcs/stockBillBack", request, "POST", true); if (result != null && (result.code == 200)) { //上传成功 var uploadedTask = new UploadededTask() { ShelfId = finishedTask.ShelfId, ShelfCode = finishedTask.ShelfCode, ModuleId = finishedTask.ModuleId, ModuleCode = finishedTask.ModuleCode, StoreId = finishedTask.StoreId, StoreCode = finishedTask.StoreCode, TaskID = finishedTask.TaskID, ItemNo = finishedTask.ItemNo, Guid = finishedTask.Guid, TaskMode = finishedTask.TaskMode, OrderNumber = finishedTask.OrderNumber, ButtonColor = finishedTask.ButtonColor, MatCode = finishedTask.MatCode, MatName = finishedTask.MatName, MatSpec = finishedTask.MatSpec, MatBatch = finishedTask.MatBatch, MatSN = finishedTask.MatSN, Qty = finishedTask.Qty, CreateTime = finishedTask.CreateTime, FinishQty = finishedTask.FinishQty, FinishTime = finishedTask.FinishTime, UploadTime = DateTime.Now, }; DbHelp.db.Insertable(uploadedTask).ExecuteCommand(); DbHelp.db.Deleteable(finishedTask).ExecuteCommand(); } //上传成功 但是此物料已经被删除!!! else if (result != null && (result.code == 500) && result.message.Contains("未查询到条码信息【")) { //上传成功 var uploadedTask = new UploadededTask() { ShelfId = finishedTask.ShelfId, ShelfCode = finishedTask.ShelfCode, ModuleId = finishedTask.ModuleId, ModuleCode = finishedTask.ModuleCode, StoreId = finishedTask.StoreId, StoreCode = finishedTask.StoreCode, TaskID = finishedTask.TaskID, ItemNo = finishedTask.ItemNo, Guid = finishedTask.Guid, TaskMode = finishedTask.TaskMode, OrderNumber = finishedTask.OrderNumber, ButtonColor = finishedTask.ButtonColor, MatCode = finishedTask.MatCode, MatName = finishedTask.MatName, MatSpec = finishedTask.MatSpec, MatBatch = finishedTask.MatBatch, MatSN = finishedTask.MatSN + "(已删除)", Qty = finishedTask.Qty, CreateTime = finishedTask.CreateTime, FinishQty = finishedTask.FinishQty, FinishTime = finishedTask.FinishTime, UploadTime = DateTime.Now, }; DbHelp.db.Insertable(uploadedTask).ExecuteCommand(); DbHelp.db.Deleteable(finishedTask).ExecuteCommand(); } else if (result != null && (result.code == 10000) && (result.message.Contains("token") || result.message.Contains("请重新登录") || result.message.Contains("无token") || result.message.Contains("无效token") || result.message.Contains("token校验失败")) ) { Logs.Write($"【定时任务:回传数据至WMS系统】根据wms接口返回 token已过期或者错误,清空token。", LogsType.Info); LocalStatic.WMSToken = string.Empty; break; } else if (result != null && (result.code == 500) && (result.message.Contains("token") || result.message.Contains("请重新登录") || result.message.Contains("无token") || result.message.Contains("无效token") || result.message.Contains("token校验失败")) ) { Logs.Write($"【定时任务:回传数据至WMS系统】根据wms接口返回 token已过期或者错误,清空token。", LogsType.Info); LocalStatic.WMSToken = string.Empty; break; } #endregion //为了调试 //Random random = new Random(); //int number = random.Next(1 , 100); //if (number <= 30) //{ // //上传成功 // var uploadedTask = new UploadededTask() // { // ShelfId = finishedTask.ShelfId, // ShelfCode = finishedTask.ShelfCode, // ModuleId = finishedTask.ModuleId, // ModuleCode = finishedTask.ModuleCode, // StoreId = finishedTask.StoreId, // StoreCode = finishedTask.StoreCode, // TaskID = finishedTask.TaskID, // ItemNo = finishedTask.ItemNo, // Guid = finishedTask.Guid, // TaskMode = finishedTask.TaskMode, // OrderNumber = finishedTask.OrderNumber, // ButtonColor = finishedTask.ButtonColor, // MatCode = finishedTask.MatCode, // MatName = finishedTask.MatName, // MatSpec = finishedTask.MatSpec, // MatBatch = finishedTask.MatBatch, // MatSN = finishedTask.MatSN, // Qty = finishedTask.Qty, // CreateTime = finishedTask.CreateTime, // FinishQty = finishedTask.FinishQty, // FinishTime = finishedTask.FinishTime, // UploadTime = DateTime.Now, // }; // DbHelp.db.Insertable(uploadedTask).ExecuteCommand(); // DbHelp.db.Deleteable(finishedTask).ExecuteCommand(); //} } catch (Exception ex) { Logs.Write($"【定时任务:回传数据至WMS系统】{finishedTask.ItemNo}发生异常," + ex.Message, LogsType.Info); Logs.Write($"【定时任务:回传数据至WMS系统】{finishedTask.ItemNo}发生异常" + ex.StackTrace, LogsType.Info); } Thread.Sleep(500); } } catch (Exception e) { Logs.Write("【定时任务:回传数据至WMS系统】发生异常" + e.Message, LogsType.Info); Logs.Write("【定时任务:回传数据至WMS系统】发生异常" + e.StackTrace, LogsType.Info); } } }); #endregion } } }