123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- using NetTaste;
- using ServiceCenter.Extensions;
- using ServiceCenter.Logs;
- using ServiceCenter.Redis;
- using ServiceCenter.SqlSugars;
- using SqlSugar;
- using WCS.Entity;
- using TaskStatus = WCS.Entity.TaskStatus;
- namespace WCS.WorkEngineering.Extensions
- {
- /// <summary>
- /// 任务扩展
- /// </summary>
- public static class TaskExtension
- {
- /// <summary>
- /// 更新任务执行记录
- /// 同步更新历史任务
- /// </summary>
- /// <param name="task">任务信息</param>
- /// <param name="db">数据库上下文</param>
- /// <param name="curPoint">当前地址</param>
- /// <param name="desc">描述</param>
- public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarScopeProvider db, string curPoint, string desc) => task.AddWCS_TASK_DTL(db, curPoint, "", desc);
- /// <summary>
- /// 更新任务执行记录
- /// 同步更新历史任务
- /// </summary>
- /// <param name="task">任务信息</param>
- /// <param name="db">数据库上下文</param>
- /// <param name="curPoint">当前地址</param>
- /// <param name="nextPoint">下一个地址</param>
- /// <param name="desc">描述</param>
- public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarScopeProvider db, string curPoint, string nextPoint, string desc)
- {
- db.Insertable(new WCS_TaskDtl
- {
- ID = Guid.NewGuid(),
- ParentTaskCode = task.ID,
- CurPoint = curPoint,
- NextPoint = nextPoint,
- Desc = desc,
- AddWho = "WCS"
- }).SplitTable().ExecuteCommand();
- task.UpdateableOldTask(db);
- }
- /// <summary>
- /// 更新历史表数据
- /// </summary>
- /// <param name="taskInfo"></param>
- /// <param name="db"></param>
- public static void UpdateableOldTask(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
- {
- if (taskInfo.Status == TaskStatus.NewBuild) return;
- // 同步任务信息
- var taskOld = db.Queryable<WCS_TaskOld>().SplitTable(tabs => tabs.Take(2)).Where(v => v.Id == taskInfo.ID).OrderByDescending(v => v.AddTime).First();
- if (taskOld is not null)
- {
- if (taskInfo.Status >= TaskStatus.Finish) taskInfo.CompleteOrCancelTasks(db);
- else
- {
- taskOld = taskInfo.Mapper<WCS_TaskOld, WCS_TaskInfo>();
- taskOld.Id = taskInfo.ID;
- db.Updateable(taskOld).Where(x => x.Id == taskOld.Id).SplitTable(x => x.Take(2)).ExecuteCommand();
- }
- }
- else
- {
- throw new KnownException($"WCS_TaskOld表中不存在任务:{taskInfo.ID},无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
- }
- }
- /// <summary>
- /// 完成或取消任务
- /// </summary>
- /// <param name="taskInfo"></param>
- /// <param name="db"></param>
- public static void CompleteOrCancelTasks(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
- {
- if (taskInfo.Status < Entity.TaskStatus.Finish)
- throw new KnownException("任务未完成或取消,无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
- // 任务完成或取消,进行相关同步动作
- var taskOld = db.Queryable<WCS_TaskOld>().SplitTable(tabs => tabs.Take(2)).Where(v => v.Id == taskInfo.ID).OrderByDescending(v => v.AddTime).First();
- if (taskOld is not null)
- {
- taskOld = taskInfo.Mapper<WCS_TaskOld, WCS_TaskInfo>();
- taskOld.Id = taskInfo.ID;
- //更新任务历史表,删除任务当前表
- db.Updateable(taskOld).SplitTable(x => x.Take(2)).ExecuteCommand();
- db.Deleteable(taskInfo).ExecuteCommand();
- }
- else
- {
- throw new KnownException($"WCS_TaskOld表中不存在任务:{taskInfo.ID},无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
- }
- }
- /// <summary>
- /// 更新表数据
- /// </summary>
- /// <param name="taskInfo"></param>
- /// <param name="db"></param>
- public static void Updateable(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
- {
- taskInfo.EditTime = DateTime.Now;
- taskInfo.EditWho = "WCS";
- db.Updateable(taskInfo).ExecuteCommand();
- }
- ///// <summary>
- ///// 获取出库任务
- ///// </summary>
- ///// <param name="taskInfo">任务</param>
- ///// <param name="db">db</param>
- ///// <param name="allOutCode">可用出库站台</param>
- ///// <param name="floor">楼层</param>
- ///// <param name="obj">堆垛机</param>
- ///// <param name="index">递归次数</param>
- ///// <returns></returns>
- ///// <exception cref="KnownException"></exception>
- //public static WCS_TaskInfo GetOutTask(this WCS_TaskInfo taskInfo, SqlSugarHelper db, List<string> allOutCode, int floor, SRM obj, int index = 1)
- //{
- // return task;
- //}
- /// <summary>
- /// 获取AGV任务ID
- /// </summary>
- /// <param name="db">db</param>
- /// <returns></returns>
- public static int GetAgvTaskId(this SqlSugarHelper db)
- {
- var id = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(1)).Max(v => v.ID);
- return id + 1;
- }
- /// <summary>
- /// 更新任务执行记录
- /// </summary>
- /// <param name="task">任务信息</param>
- public static void UpdateRedisHash(this WCS_TaskInfo task)
- {
- var key = $"Hash:{task.ID}";
- if (task.Status >= TaskStatus.Finish)
- {
- RedisHub.WMS.Del(key);
- }
- else
- {
- RedisHub.WMS.HMSet(key, task.ToDic());
- }
- }
- #region 工字轮支线分流
- public static string GetMatList(this List<string> matList)
- {
- return matList.Distinct().Aggregate("", (current, mat) => current + $"[{mat}]");
- }
- #endregion 工字轮支线分流
- /// <summary>
- /// 去除转义字符
- /// </summary>
- /// <param name="value"></param>
- /// <returns></returns>
- public static string RemoveEscapeCharacters(this string? value)
- {
- return value.Trim('\0', '\a', '\b', '\f', '\n', '\r', '\t', '\v').Replace("�\u0012", "").Replace("\\0", "").Replace("\\r", "").Replace("\0", "").Trim();
- }
- public static void UpdataErrorinfo(this BaseErrorinfoWcs error)
- {
- SqlSugarHelper.Do(db =>
- {
- var errorinfoWcs = db.Default.Queryable<BaseErrorinfoWcs>().With(SqlWith.NoLock).Where(v => v.ContBarCode == error.ContBarCode && v.Message == error.Message).First();
- if (errorinfoWcs != null)
- {
- errorinfoWcs.Count = errorinfoWcs.Count+1;
- db.Default.Updateable(errorinfoWcs).ExecuteCommand();
- }
- else
- {
- db.Default.Insertable(error).ExecuteCommand();
- }
- });
- }
- }
- /// <summary>
- /// 垛形位信息
- /// </summary>
- public class StackPosInfo
- {
- /// <summary>
- /// 任务号
- /// </summary>
- public int TaskNumber { get; set; }
- /// <summary>
- /// 是否空置
- /// </summary>
- public bool IsEmpty { get; set; }
- /// <summary>
- /// 坐标号
- /// </summary>
- public string XYNo { get; set; }
- /// <summary>
- /// 物料编码
- /// </summary>
- public string MatCode { get; set; }
- /// <summary>
- /// 正反面
- /// </summary>
- public int SideNum { get; set; }
- /// <summary>
- /// 工字轮类型
- /// </summary>
- public string SpoolType { get; set; }
- /// <summary>
- /// 是否结束
- /// </summary>
- public bool Finish { get; set; }
- }
- }
|