schangxiang@126.com
2025-09-17 ff43ddf18764629ff875478e4e47a7281cbd230a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using Admin.NET.Core.TaskModule.Enum;
using iWareSql.MyDbContext;
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace iWareSql.DataAccess
{
    public class TaskHandler
    {
        /// <summary>
        /// 查找该库位是否存在 未结束的任务
        /// </summary>
        /// <param name="dbContext"></param>
        /// <param name="location"></param>
        /// <returns></returns>
        public static ware_task IsExistNoFinishedTask(MyDbContext.MyDbContext dbContext, string location)
        {
            var ware_Tasks = dbContext.ware_task
                .Where(CommonFilterExpressionForNoFinishAndNoCancel())
                .Where(x => (x.IsDeleted == null || x.IsDeleted == false)
            && (x.FromLocationCode == location || x.ToLocationCode == location)
             ).FirstOrDefault();
            return ware_Tasks;
        }
 
        /// <summary>
        /// 获取当前未结束的任务的站点集合(包括起点和终点)
        /// </summary>
        /// <param name="dbContext"></param>
        /// <returns></returns>
        public static List<string> GetLocationListByNoFinishedTask(MyDbContext.MyDbContext dbContext)
        {
            List<string> locationList = new List<string>();
            var ware_Tasks = dbContext.ware_task
                .Where(CommonFilterExpressionForNoFinishAndNoCancel())
                .Where(x =>
              x.AreaType == (int)AreaTypeEnum.立体库
            && (x.IsDeleted == null || x.IsDeleted == false)).ToList();
            locationList.AddRange(ware_Tasks.Select(x => x.FromLocationCode).ToList());
            locationList.AddRange(ware_Tasks.Select(x => x.ToLocationCode).ToList());
            return locationList;
        }
 
        /// <summary>
        /// 某巷道 是否存在 未结束,但是已下发WCS  的任务
        /// </summary>
        /// <param name="repository"></param>
        /// <param name="locationCode"></param>
        /// <returns></returns>
        public static ware_task IsExistNoFinishedAndHasIssueWCSTaskByLane(MyDbContext.MyDbContext dbContext, int lane)
        {
            var ware_Tasks = dbContext.ware_task
                .Where(CommonFilterExpressionForNoFinishAndNoCancel())
                .Where(x =>
              x.State == 1
             && x.Lane == lane
             && x.AreaType == (int)AreaTypeEnum.立体库
             && (x.IsDeleted == null || x.IsDeleted == false)
            ).FirstOrDefault();
            return ware_Tasks;
        }
 
 
 
        /// <summary>
        /// 更新任务表的任务消息
        /// </summary>
        /// <param name="taskId"></param>
        /// <param name="errMsg"></param>
        public static void UpdateTaskMsg(long taskId, string errMsg)
        {
            using (MyDbContext.MyDbContext dbContext = new MyDbContext.MyDbContext())
            {
                var singleTask = dbContext.ware_task.Where(x => x.Id == taskId).FirstOrDefault();
                
                singleTask.UpdatedTime = DateTime.Now;
 
                dbContext.SaveChanges();
            }
        }
 
 
        /// <summary>
        /// 获取 任务 不是 已完成,并且不是 已取消 的任务筛选条件
        /// </summary>
        /// <returns></returns>
        public static Func<ware_task, bool> CommonFilterExpressionForNoFinishAndNoCancel()
        {
            Func<ware_task, bool> predicate = m =>
              (m.TaskState != Convert.ToInt32(WareTaskStateEnum.已完成)
               && m.TaskState != Convert.ToInt32(WareTaskStateEnum.已取消)
              )
             ;
            return predicate;
        }
 
        /// <summary>
        /// 获取 任务 不是 已完成,并且不是 已取消 ,并且是 已暂停的 的任务筛选条件
        /// </summary>
        /// <returns></returns>
        public static Func<ware_task, bool> CommonFilterExpressionForNoFinishAndNoCancelAndNoStop()
        {
            Func<ware_task, bool> predicate = m =>
              (m.TaskState != Convert.ToInt32(WareTaskStateEnum.已完成)
               && m.TaskState != Convert.ToInt32(WareTaskStateEnum.已取消)
               && m.TaskState != Convert.ToInt32(WareTaskStateEnum.已暂停)
              )
             ;
            return predicate;
        }
    }
}