using Hanhe.iWCS.Common;
|
using HH.AMS.BLL;
|
using HH.AMS.BLL.AdminUI.Basic;
|
using HH.AMS.BLL.MongoDB;
|
using HH.AMS.Entitys.AdminUI.Basic;
|
using HH.AMS.Entitys.AdminUI.Task;
|
using MongoDB.Driver;
|
using MongoDB.Driver.Builders;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
|
namespace HH.AMS.APIThread
|
{
|
/// <summary>
|
/// 生成任务主线程
|
/// </summary>
|
public class TaskThread
|
{
|
/// <summary>
|
/// 主任务线程
|
/// </summary>
|
private Thread _MainThread { get; set; }
|
|
private static readonly TaskThread instance = new TaskThread();
|
|
private TaskThread() { }
|
|
/// <summary>
|
/// 获取单实例
|
/// </summary>
|
public static TaskThread Instance
|
{
|
get
|
{
|
return instance;
|
}
|
}
|
|
/// <summary>
|
/// 构造函数 单例模式 只执行一次
|
/// </summary>
|
public void Initialize()
|
{
|
_MainThread = new Thread(MainThreadHandle);
|
TaskCommandList = new List<AddTaskEntityMongodb>();
|
}
|
|
private List<AddTaskEntityMongodb> TaskCommandList = new List<AddTaskEntityMongodb>();
|
private IMongoQuery cmdQuery = null;
|
private SortByDocument cmdSortBy = new SortByDocument { { "createDate", 1 } };
|
/// <summary>
|
/// 工作线程
|
/// </summary>
|
private void MainThreadHandle()
|
{
|
while (true)
|
{
|
if (TaskCommandList.Count == 0)
|
{
|
try
|
{
|
TaskCommandList = MongoDBSingleton.Instance.Find<AddTaskEntityMongodb>(cmdQuery, 1, "_id_", typeof(AddTaskEntityMongodb).Name, cmdSortBy);
|
}
|
catch (Exception ex) { CMMLog.Error("获取AddTaskEntityMongodb关于AGV指令出错:" + ex.Message); }
|
}
|
else
|
{
|
#region 循环模式
|
int taskNum = TaskCommandList.Count;
|
WebAPICommon _WebAPICommon = new WebAPICommon();
|
InfResultEntity ier = new InfResultEntity() { success = false };
|
foreach (AddTaskEntityMongodb newCmd in TaskCommandList)
|
{
|
try
|
{
|
AddTaskEntity _task = new AddTaskEntity();
|
_task.deviceName = newCmd.deviceName;
|
_task.ext1 = newCmd.ext1;
|
_task.ext2 = newCmd.ext2;
|
_task.ext3 = newCmd.ext3;
|
_task.extParam = newCmd.extParam;
|
_task.locationFrom = newCmd.locationFrom;
|
_task.locationTo = newCmd.locationTo;
|
_task.priority = newCmd.priority;
|
_task.sysName = newCmd.sysName;
|
_task.taskNo = newCmd.taskNo;
|
_task.whNoFrom = newCmd.whNoFrom;
|
_task.whNoTo = newCmd.whNoTo;
|
|
InfResultEntity r = _WebAPICommon.AddSingleTask(_task);
|
if (!r.success)
|
{
|
ier.failList.Add(new Result()
|
{
|
taskNo = newCmd.taskNo,
|
errCode = r.errCode,
|
errMsg = r.errMsg
|
});
|
}
|
else
|
{
|
//任务生成成功,删除队列元素
|
var removeQuery = Query.EQ("_id", newCmd._id);
|
MongoDBSingleton.Instance.Remove<AddTaskEntityMongodb>(removeQuery, typeof(AddTaskEntityMongodb).Name);
|
}
|
}
|
catch (Exception ex)
|
{
|
ier.errCode = "3";
|
ier.errMsg = ex.Message + ":" + ex.StackTrace;
|
}
|
|
#region 获取异常信息
|
if (ier.failList.Count == 0)
|
{
|
ier.success = true;
|
ier.errCode = "0";
|
ier.errMsg = "";
|
}
|
else
|
{
|
}
|
#endregion
|
|
if (ier.failList.Count == taskNum)
|
{
|
ier.errCode = ier.failList[0].errCode;
|
ier.success = false;
|
}
|
else
|
{
|
ier.errCode = "0";
|
ier.success = true;
|
}
|
|
}
|
string errResultValue = JsonConvert.SerializeObject(ier);
|
TN_AM_REQ_INF_LOGEntity log = new TN_AM_REQ_INF_LOGEntity();
|
log.CN_S_GUID = Guid.NewGuid().ToString();
|
log.CN_S_INTERFACE = "AsynAddTask";
|
log.CN_S_INTERFACE_NOTE = "异步创建任务";
|
log.CN_S_REQUEST = Newtonsoft.Json.JsonConvert.SerializeObject(TaskCommandList);
|
log.CN_S_RESPONSE = Newtonsoft.Json.JsonConvert.SerializeObject(errResultValue);
|
BLLCreator.Create<TN_AM_REQ_INF_LOGBLL>().Add(log);
|
|
TaskCommandList.Clear();
|
#endregion
|
}
|
Thread.Sleep(1000);
|
}
|
}
|
|
|
/// <summary>
|
/// 开启服务
|
/// </summary>
|
public void Start()
|
{
|
_MainThread.Start();
|
}
|
|
/// <summary>
|
/// 停止服务
|
/// </summary>
|
public void Stop()
|
{
|
_MainThread.Abort();
|
}
|
}
|
}
|