jt
2021-06-10 5d0d028456874576560552f5a5c4e8b801786f11
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
using HH.WMS.BLL.Basic;
using HH.WMS.Common.External;
using HH.WMS.Common.Response;
using HH.WMS.DAL;
using HH.WMS.DAL.Algorithm;
using HH.WMS.DAL.Basic;
using HH.WMS.DAL.SysMgr;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Common;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace HH.WMS.BLL.External
{
    /// <summary>
    /// 验证接口参数
    /// </summary>
    public class ParameterVerifyBLL : DapperBaseBLL
    {
        private static string _className = "HH.BWMS.BLL.External.ParameterVerify";
 
        #region 验证入库业务参数 + VerifyInWorkArea
 
        /// <summary>
        /// 验证入库业务参数
        /// </summary>
        /// <param name="executeInWorkAreaPara"></param>
        /// <returns></returns>
        public static ExecuteInWorkAreaPara VerifyInWorkArea(ExecuteInWorkAreaPara executeInWorkAreaPara)
        {
            _className += ".VerifyInWorkArea";
 
            if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == null)
            {
                executeInWorkAreaPara.InWorkAreaEntity.isTransport = "N";
            }
 
            //物料编码_对象不为空时,必须存在物料编码
            if (executeInWorkAreaPara.InWorkAreaEntity.data != null)
                if (executeInWorkAreaPara.InWorkAreaEntity.data.Any(entity => string.IsNullOrEmpty(entity.itemCode)))
                {
                    executeInWorkAreaPara.BasisResponse = BasisResponse.Error("物料编码为空" + JsonConvert.SerializeObject(executeInWorkAreaPara.InWorkAreaEntity.data), _className);
                    return executeInWorkAreaPara;
                }
 
            //任务号_当任务号不为空时,系统判断任务号是否重复
            if (!string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.taskNo))
            {
                if (DALCreator.Create<TN_WM_TASKDAL>().GetTaskByTaskNo(executeInWorkAreaPara.InWorkAreaEntity.taskNo).Count > 0)
                {
                    executeInWorkAreaPara.BasisResponse = BasisResponse.Error("任务号" + executeInWorkAreaPara.InWorkAreaEntity.taskNo + "重复!", _className);
                    return executeInWorkAreaPara;
                }
            }
 
            //起始库区
            if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.startBit))
            {
                executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前起始位置不存在!" + executeInWorkAreaPara.InWorkAreaEntity.startBit, _className);
                return executeInWorkAreaPara;
            }
            else
            {
                //缓存起始库区实体
                executeInWorkAreaPara.StartStockAreaEntity = DALCreator.Create<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(executeInWorkAreaPara.InWorkAreaEntity.startBit.Trim());
                if (executeInWorkAreaPara.StartStockAreaEntity == null)
                {
                    executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前起始位置未找到对应的库区!" + executeInWorkAreaPara.InWorkAreaEntity.startBit, _className);
                    return executeInWorkAreaPara;
                }
 
                // 检查货位状态  是转运且管控数量时使用
                if (executeInWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y") && executeInWorkAreaPara.InWorkAreaEntity.isTransport.Equals("Y"))
                {
                    executeInWorkAreaPara.StartLocationExt = BLLCreator.Create<HH.WMS.BLL.Basic.TN_WM_LOCATION_EXTBLL>().GetModel(" where CN_S_LOCATION_CODE = '" + executeInWorkAreaPara.InWorkAreaEntity.startBit.Trim() + "'").FirstOrDefault();
                    if (!executeInWorkAreaPara.StartLocationExt.CN_S_LOCATION_STATE.Equals("正常"))
                    {
                        executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位状态为" + executeInWorkAreaPara.StartLocationExt.CN_S_LOCATION_STATE + ",货位不可用!", _className);
                        return executeInWorkAreaPara;
                    }
                    if (!executeInWorkAreaPara.StartLocationExt.CN_S_USE_STATE.Equals("满"))
                    {
                        executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位存储状态为" + executeInWorkAreaPara.StartLocationExt.CN_S_USE_STATE + ",货位不可用!", _className);
                        return executeInWorkAreaPara;
                    }
                    //锁定起点货位
                    OperateResult lockResult = BLLCreator.Create<HH.WMS.BLL.Basic.TN_WM_LOCATION_EXTBLL>().UpdateState(executeInWorkAreaPara.InWorkAreaEntity.startBit, "预出库锁定", "");
                    if (lockResult.Success)
                    {
                        AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeInWorkAreaPara.InWorkAreaEntity.startBit);
                        //添加货位状态变化
                        BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeInWorkAreaPara.InWorkAreaEntity.startBit, "正常", "预出库锁定", "入库并且转运需要锁定起点货位防止其他资源竞争", executeInWorkAreaPara.InWorkAreaEntity.sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE,null);
                        executeInWorkAreaPara.RollbackLocations.Add(executeInWorkAreaPara.InWorkAreaEntity.startBit);
                    }
                    else
                    {
                        if (!lockResult.Success)
                        {
                            executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "失败!详细原因为:" + lockResult.Msg, _className);
                        }
                        else
                        {
                            executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "失败!详细原因为:SqlExecuteResult影响行数为0", _className);
                        }
                        return executeInWorkAreaPara;
                    }
                }
 
                //检查起点货位是否为报废状态 
                executeInWorkAreaPara.InWorkAreaEntity.startArea = executeInWorkAreaPara.StartStockAreaEntity.CN_S_AREA_CODE;
                executeInWorkAreaPara.InWorkAreaEntity.startStock = executeInWorkAreaPara.StartStockAreaEntity.CN_S_STOCK_CODE;
 
            }
            return executeInWorkAreaPara;
        }
 
        #endregion
 
        #region 验证出库业务参数 + VerifyOutWorkArea
        /// <summary>
        /// 验证出库业务参数
        /// </summary>
        /// <param name="executeOutWorkAreaPara"></param>
        /// <returns></returns>
        public static ExecuteOutWorkAreaPara VerifyOutWorkArea(ExecuteOutWorkAreaPara executeOutWorkAreaPara)
        {
            if (executeOutWorkAreaPara.OutWorkAreaEntity == null)
            {
                executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("参数不合法,接收参数为null!", _className);
                return executeOutWorkAreaPara;
            }
 
            #region 检验终点库区
            if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
            {
                executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("给定的目的位置不存在!", _className);
                return executeOutWorkAreaPara;
            }
            //获取终点库区信息
            executeOutWorkAreaPara.EndStockAreaEntity = DALCreator.Create<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(executeOutWorkAreaPara.OutWorkAreaEntity.endBit.Trim());
            if (executeOutWorkAreaPara.EndStockAreaEntity == null)
            {
                executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("给定的目的位置未找到库区!", _className);
                return executeOutWorkAreaPara;
            }
            // 检查货位状态  是转运且管控数量时使用
            if (executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y") && executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport.Equals("Y"))
            {
                executeOutWorkAreaPara.EndLocationExt = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetModel(executeOutWorkAreaPara.OutWorkAreaEntity.endBit.Trim()).FirstOrDefault();
                if (!executeOutWorkAreaPara.EndLocationExt.CN_S_LOCATION_STATE.Equals("正常"))
                {
                    executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位状态为" + executeOutWorkAreaPara.EndLocationExt.CN_S_LOCATION_STATE + ",货位不可用!", _className);
                    return executeOutWorkAreaPara;
                }
                if (!executeOutWorkAreaPara.EndLocationExt.CN_S_USE_STATE.Equals("空"))
                {
                    executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位存储状态为" + executeOutWorkAreaPara.EndLocationExt.CN_S_USE_STATE + ",货位不可用!", _className);
                    return executeOutWorkAreaPara;
                }
                //锁定终点货位
                OperateResult lockResult = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(executeOutWorkAreaPara.OutWorkAreaEntity.endBit, "预入库锁定", "正常");
                if (lockResult.Success)
                {
                    AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeOutWorkAreaPara.OutWorkAreaEntity.endBit);
                    BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeOutWorkAreaPara.OutWorkAreaEntity.endBit, "正常", "预入库锁定", "出库并且转运需要锁定终点货位防止其他资源竞争", executeOutWorkAreaPara.OutWorkAreaEntity.sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE,null);
                    executeOutWorkAreaPara.RollLocations.Add(executeOutWorkAreaPara.OutWorkAreaEntity.endBit);
                }
                else
                {
                    executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("锁定终点货位" + executeOutWorkAreaPara.OutWorkAreaEntity.endBit + "失败!详细原因为:SqlExecuteResult返回false或影响row为0", _className);
                    return executeOutWorkAreaPara;
                }
            }
            executeOutWorkAreaPara.OutWorkAreaEntity.startStock = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STOCK_CODE;
            executeOutWorkAreaPara.OutWorkAreaEntity.endArea = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_AREA_CODE;
 
            #endregion
 
            return executeOutWorkAreaPara;
        }
        #endregion
    }
}