2
schangxiang@126.com
2024-10-01 ffa9dc9c2d28c0b8d88b26d483ba9667e316db01
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using System;
using iWareSql.DBModel;
using System.Linq;
using XiGang.Core.Model;
using iWareCommon;
using iWareCommon.Common.Globle;
 
namespace iWareSql.DataAccess
{
 
    /// <summary>
    /// 出库计划
    /// </summary>
    public class PlanOutTaskHandler
    {
        /// <summary>
        /// 是否需要插队
        /// </summary>
        /// <param name="context"></param>
        /// <returns>true:需要,false:不需要插队</returns>
        public static bool IsNeedChaDuiCommonTaskSequenceGuid(DbModel context, string taskSequenceGuid)
        {
            if (string.IsNullOrEmpty(taskSequenceGuid))
            {
                return false;//不需要插队
            }
            var queryState1 = (int)OutTaskDetailStateEnum.完成;
            var queryState2 = (int)OutTaskDetailStateEnum.缺料;
            var queryState3 = (int)OutTaskDetailStateEnum.已取消;
            var detaiList = context.Plan_OutTaskDetail.Where(x =>
                (x.OutTaskDetailState != queryState1 && x.OutTaskDetailState != queryState2 && x.OutTaskDetailState != queryState3)
                && x.TaskSequenceGuid == taskSequenceGuid
                ).ToList();
            if (detaiList != null && detaiList.Count > 0)
            {//如果有,表示还有一些未结束,就认为 不需要插队
                return false;//不需要插队
            }
            else
            {
                return true;//需要插队
            }
        }
 
        /// <summary>
        /// 是否存在 还在下发的计划
        /// </summary>
        /// <param name="context"></param>
        /// <returns>true:存在,false:不存在</returns>
        public static bool IsExistRuningOutTaskDetail(DbModel context)
        {
            var queryState1 = (int)OutTaskDetailStateEnum.等待中;
            var queryState2 = (int)OutTaskDetailStateEnum.缺料;
            var detaiList = context.Plan_OutTaskDetail.Where(x => x.OutTaskDetailState == queryState1 || x.OutTaskDetailState == queryState2).ToList();
            if (detaiList != null && detaiList.Count > 0)
            {
                var allCount = detaiList.Count;
                var queLiaoCount = detaiList.Where(x => x.OperationRemark == SysGloble.QUELIAO_STR).Count();
                if (queLiaoCount == allCount)
                {
                    return false;
                }
                return true;
            }
            else
            {
                return false;
            }
        }
 
        /// <summary>
        /// 当出库任务rgv任务完成后,更新状态
        /// </summary>
        /// <param name="context"></param>
        /// <param name="planOutDetailId"></param>
        /// <param name="currnetChange"></param>
        /// <param name="remark"></param>
        public static void UpdatePlanStateToFinished(DbModel context, Task_Main mainTask, string remark)
        {
            //获取主表任务
            Plan_OutTaskDetail outDetailTask = context.Plan_OutTaskDetail.Where(x => x.Id == mainTask.Plan_OutTaskDetail_Id).FirstOrDefault();
            if (outDetailTask != null)
            {
                Plan_OutTask outTask = context.Plan_OutTask.Where(x => x.Id == outDetailTask.M_PlanId).First();
 
 
                var changeOutTaskDetailState = OutTaskDetailStateEnum.完成;
                PlanOutTaskHandler.UpdateStateForOutTaskDetail(outDetailTask, changeOutTaskDetailState, remark);
 
                //这里暂时不处理主表的状态
            }
        }
 
 
 
        //private static OutPlanStateEnum GetChangeStateForPlan_OutTask(DbModel context, Plan_OutTask outTask, OutTaskDetailStateEnum currnetChange, string remark)
        //{
        //    var queryState1 = (int)OutTaskDetailStateEnum.完成;
        //    var queryState2 = (int)OutTaskDetailStateEnum.执行中;
        //    var allPlanList = context.Plan_OutTaskDetail.Where(x => x.M_PlanId == outTask.Id).ToList();
        //    var issued_planList = allPlanList.Where(x => x.OutTaskDetailState == queryState1 || x.OutTaskDetailState == queryState2).ToList();
        //    int issued_planListCount = issued_planList.Count();
        //    if (currnetChange == OutTaskDetailStateEnum.完成 || currnetChange == OutTaskDetailStateEnum.执行中)
        //    {
        //        //计入本次要修改的条数
        //        issued_planListCount += 1;
        //    }
        //    OutPlanStateEnum changeOutTaskDetailState;
        //    if (allPlanList.Count() == issued_planListCount)
        //    {//更新主表状态为 全部下发
 
        //        changeOutTaskDetailState = OutPlanStateEnum.全部下发;
        //        PlanOutTaskHandler.UpdateStateForOutTask(outTask, changeOutTaskDetailState, remark);
        //    }
        //    else if (issued_planListCount > 0)
        //    {
        //        changeOutTaskDetailState = OutPlanStateEnum.部分下发;
        //        PlanOutTaskHandler.UpdateStateForOutTask(outTask, changeOutTaskDetailState, remark);
        //    }
        //}
 
 
 
        /// <summary>
        /// 更新明细表的状态
        /// </summary>
        /// <param name="outDetailTask"></param>
        /// <param name="changeOutTaskDetailState"></param>
        /// <param name="remark"></param>
        public static void UpdateStateForOutTaskDetail(Plan_OutTaskDetail outDetailTask, OutTaskDetailStateEnum changeOutTaskDetailState, string remark)
        {
            outDetailTask.OutTaskDetailState = (int)changeOutTaskDetailState;
            outDetailTask.OutTaskDetailStateName = changeOutTaskDetailState.ToString();
            if (changeOutTaskDetailState == OutTaskDetailStateEnum.完成)
            {
                outDetailTask.FinishTime = DateTime.Now;//增加计划子表完成时间 【EditBy shaocx,2022-06-20】
            }
 
            outDetailTask.ModifyBy = SysGloble.WCSSystem;
            outDetailTask.ModifyTime = DateTime.Now;
            outDetailTask.OperationRemark = remark + ",更改状态为" + changeOutTaskDetailState.ToString();
        }
 
        /// <summary>
        /// 更新主表的状态
        /// </summary>
        /// <param name="outDetailTask"></param>
        /// <param name="changeOutTaskDetailState"></param>
        /// <param name="remark"></param>
        public static void UpdateStateForOutTask(Plan_OutTask outTask, OutPlanStateEnum changeOutTaskDetailState, string remark)
        {
            outTask.PlanState = (int)changeOutTaskDetailState;
            outTask.PlanStateName = changeOutTaskDetailState.ToString();
            outTask.ModifyBy = SysGloble.WCSSystem;
            outTask.ModifyTime = DateTime.Now;
            outTask.OperationRemark = remark + ",更改状态为" + changeOutTaskDetailState.ToString();
        }
    }
}