using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using yunneiWCS.EnumDefine;
|
using yunneiWCS.ORM;
|
|
namespace yunneiWCS
|
{
|
/// <summary>
|
/// 业务帮助类
|
/// </summary>
|
public class TaskNoHelper
|
{
|
private readonly static object lock_Srm = new object();
|
|
private readonly static object lock_Agv = new object();
|
|
|
|
/// <summary>
|
/// 创建堆垛机任务号,随机生成 (1-999999)的PLC任务号
|
/// </summary>
|
/// <returns></returns>
|
public static string CreatePlcTaskIdForSrmTaskPublic(int index)
|
{
|
var plcTaskNo = CreatePlcTaskIdForSrmTask();
|
var queryTaskStatus = (int)taskStatus.作废;
|
var queryTaskStatus2 = (int)taskStatus.完成;
|
int count = 0;
|
using (dbmodel mod = new dbmodel())
|
{
|
count = mod.task.Where(x => x.PlcTaskNo == plcTaskNo && (x.taskStatus != queryTaskStatus && x.taskStatus != queryTaskStatus2)).Count();
|
}
|
|
//count = 5;//测试代码
|
//if (index == 3) count = 0;//测试代码
|
if (count > 0)
|
{
|
if (index >= 3)
|
{
|
throw new Exception("尝试三次生成的任务号" + plcTaskNo + ",与当前未结束的堆垛机任务号一致");
|
}
|
index++;
|
plcTaskNo = CreatePlcTaskIdForSrmTaskPublic(index);
|
return plcTaskNo;
|
}
|
else
|
{
|
return plcTaskNo;
|
}
|
}
|
|
|
/// <summary>
|
/// 创建堆垛机任务号,随机生成 (1-999999)的PLC任务号
|
/// </summary>
|
/// <returns></returns>
|
private static string CreatePlcTaskIdForSrmTask()
|
{
|
lock (lock_Srm)
|
{
|
int startNum = 100001;
|
int iSeed = 999999;
|
//按照AGV的要求,必须是6位数字 【Editby shaocx,2025-09-09】
|
return new Random(Guid.NewGuid().GetHashCode()).Next(startNum, iSeed).ToString();
|
}
|
}
|
|
/// <summary>
|
/// 创建Agv任务号
|
/// </summary>
|
/// <returns></returns>
|
public static string CreateTaskIdForAgvTask(string plcTaskNo)
|
{
|
var formattedPlcTaskNo = plcTaskNo;
|
//按照AGV的要求,必须是6位数字 【Editby shaocx,2025 - 09 - 09】
|
//if (plcTaskNo.Length < 6)
|
//{
|
// 不足 6 位,在右侧补 0,补足到 6 位
|
// formattedPlcTaskNo = plcTaskNo.PadRight(6, '0');
|
//}
|
//else
|
//{
|
// 已经是 6 位或更长,直接使用(如果业务上要求不能超过 6 位,可以再截取 Substring(0,6))
|
// formattedPlcTaskNo = plcTaskNo;
|
//}
|
lock (lock_Agv)
|
{
|
//年月日时分秒-plc任务号,如 20220325190023-1234
|
return DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + formattedPlcTaskNo;
|
}
|
}
|
/// <summary>
|
/// 手动创建Agv任务号
|
/// </summary>
|
/// <returns></returns>
|
public static string CreateTaskIdForAgvTaskByHand()
|
{
|
lock (lock_Agv)
|
{
|
//年月日时分秒-plc任务号,如 20220325190023-1234
|
return DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + "000000";
|
}
|
}
|
}
|
}
|