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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
using HanHe.Utility.Data;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Check;
using HH.WMS.Entitys.Common;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.OracleClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace HH.WMS.DAL.Check
{
    public class TN_WM_CHECK_MSTDAL : DapperBaseDAL
    {
        #region 获取分页列表
        /// <summary>
        /// 获取分页列表
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        /// <history>[HanHe(lt)] CREATED 2018/7/3</history>
        public DataTable GetDataTable(dynamic obj)
        {
            var isFirstLevelOrg = obj.Value<bool>("isFirstLevelOrg");
            var currentOrgCode = obj.Value<string>("currentOrgCode");
            string sqlWhere = obj.sqlWhere;
            if (!isFirstLevelOrg)
            {
                //sqlWhere += " AND CN_S_NEXT_ORG_CODE='" + currentOrgCode + "' ";
                sqlWhere += " AND ((CN_S_CURR_ORG_CODE='" + currentOrgCode + "' or CN_S_NEXT_ORG_CODE='" + currentOrgCode + "' ) OR CN_S_NEXT_ORG_CODE='') ";
            }
 
            DbCommand cmd = DataAccess.GetStoredProcCommand("prc_query");
            this.DataAccess.AddInParameter(cmd, "TableName", ComDbType.CHAR, "TN_WM_CHECK_MST");
            this.DataAccess.AddInParameter(cmd, "WhereStr", ComDbType.CHAR, sqlWhere);
            this.DataAccess.AddInParameter(cmd, "OrderByStr", ComDbType.CHAR, obj.OrdeBy);
            this.DataAccess.AddInParameter(cmd, "PageSize", ComDbType.INT, obj.pageSize);
            this.DataAccess.AddInParameter(cmd, "PageIndex", ComDbType.INT, obj.pageIndex);
            this.DataAccess.AddOutParameter(cmd, "TotalPage", ComDbType.INT, 4);
            this.DataAccess.AddOutParameter(cmd, "TotalRecord", ComDbType.INT, 4);
 
            //如果是oracle  增加特性
            if (!string.IsNullOrEmpty(Now_dbType) && Now_dbType.Equals("ORACLE"))
            {
                //处理游标类型 因DbType无游标类型,游标类型单独处理
                ComDbType.AddOrcOutParameter(cmd, "v_cur", OracleType.Cursor);
            }
            try
            {
                //获得列表
                DataTable dt = DataAccessExtensive.ExecuteDataTable(this.DataAccess, cmd);
                obj.PageCount = Convert.ToInt32(this.DataAccess.GetParameterValue(cmd, "TotalRecord"));
                return dt;
            }
            catch (Exception)
            {
 
                throw;
            }
        }
 
        /// <summary>
        /// 获取分页列表
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        /// <history>[HanHe(lt)] CREATED 2018/7/3</history>
        public DataTable GetDataTable(string sqlWhere, string OrdeBy, int pageSize, int pageIndex)
        {
            DbCommand cmd = DataAccess.GetStoredProcCommand("prc_query");
            this.DataAccess.AddInParameter(cmd, "TableName", ComDbType.CHAR, "TN_WM_CHECK_MST");
            this.DataAccess.AddInParameter(cmd, "WhereStr", ComDbType.CHAR, sqlWhere);
            this.DataAccess.AddInParameter(cmd, "OrderByStr", ComDbType.CHAR, OrdeBy);
            this.DataAccess.AddInParameter(cmd, "PageSize", ComDbType.INT, pageSize);
            this.DataAccess.AddInParameter(cmd, "PageIndex", ComDbType.INT, pageIndex);
            this.DataAccess.AddOutParameter(cmd, "TotalPage", ComDbType.INT, 4);
            this.DataAccess.AddOutParameter(cmd, "TotalRecord", ComDbType.INT, 4);
 
            //如果是oracle  增加特性
            if (!string.IsNullOrEmpty(Now_dbType) && Now_dbType.Equals("ORACLE"))
            {
                //处理游标类型 因DbType无游标类型,游标类型单独处理
                ComDbType.AddOrcOutParameter(cmd, "v_cur", OracleType.Cursor);
            }
            try
            {
                //获得列表
                DataTable dt = DataAccessExtensive.ExecuteDataTable(this.DataAccess, cmd);
                //obj.PageCount = Convert.ToInt32(this.DataAccess.GetParameterValue(cmd, "TotalRecord"));
                return dt;
            }
            catch (Exception)
            {
 
                throw;
            }
        }
        #endregion
 
        #region  查询盘点业务主表
        /// <summary>
        /// 查询盘点业务主表
        /// </summary>
        /// <param name="sqlwhere">查询条件</param>
        /// <returns></returns>
        /// <history>[HanHe(lt)] CREATED 2018/7/3</history>
        public DataTable Getentity(string sqlwhere)
        {
            string sql = "SELECT * FROM TN_WM_CHECK_MST WHERE 1=1 {0}";
            sql = string.Format(sql, sqlwhere);
            DbCommand cmd = DataAccess.GetSqlStringCommand(sql);
            return DataAccessExtensive.ExecuteDataTable(this.DataAccess, cmd);
        }
        #endregion
 
        /// <summary>
        /// 获取货位物料信息
        /// </summary>
        /// <param name="sqlwhere">查询条件</param>
        /// <returns></returns>
        /// <history>[HanHe(lt)] CREATED 2018/7/12</history>
        public List<TN_WM_CHECK_DTLEntity> Getlist(string sqlwhere, string type)
        {
            var sql = "";
            if (type == "物料盘点")
            {
                sql = @"select * from (SELECT a.CN_S_STOCK_CODE,a.CN_S_STOCK_AREA,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,CN_S_ITEM_STATE,'' AS CN_S_LOCATION_CODE,'' as CN_S_LOT_NO,b.CN_S_OWNER,b.CN_S_MODEL,b.CN_S_FIGURE_NO,SUM(CN_F_QUANTITY) AS CN_F_QUANTITY, CN_S_MEASURE_UNIT FROM dbo.tn_wm_b_tray_location AS a LEFT JOIN TN_WM_B_TRAY_ITEM_MST AS b ON a.CN_S_TRAY_CODE=b.CN_S_TRAY_CODE
GROUP BY a.CN_S_STOCK_CODE,a.CN_S_STOCK_AREA,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,CN_S_ITEM_STATE,b.CN_S_OWNER,b.CN_S_MODEL,b.CN_S_FIGURE_NO,CN_S_MEASURE_UNIT) b {0} ";
            }
            else
            {
 
                sql = @"select * from (SELECT a.CN_S_STOCK_CODE,a.CN_S_STOCK_AREA,a.CN_S_LOCATION_CODE,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,CN_S_ITEM_STATE,'' as CN_S_LOT_NO,b.CN_S_OWNER,b.CN_S_MODEL,b.CN_S_FIGURE_NO,ISNULL(CN_F_QUANTITY,0) AS CN_F_QUANTITY, CN_S_MEASURE_UNIT FROM
 dbo.tn_wm_b_tray_location AS a
LEFT JOIN TN_WM_B_TRAY_ITEM_MST AS b ON a.CN_S_TRAY_CODE=b.CN_S_TRAY_CODE 
) b {0} ";
            }
            sql = string.Format(sql, sqlwhere);
            DbCommand cmd = DataAccess.GetSqlStringCommand(sql);
            return DataAccessExtensive.ExecuteListEntity<TN_WM_CHECK_DTLEntity>(this.DataAccess, cmd, SetEntity);
 
        }
 
        /// <summary>
        /// 设置实体的各列
        /// </summary>
        private void SetEntity(TN_WM_CHECK_DTLEntity entity, IDataReader reader)
        {
            SetEntityUti(entity, "CN_S_STOCK_CODE", "CN_S_STOCK_CODE", reader);
            SetEntityUti(entity, "CN_S_STOCK_AREA", "CN_S_STOCK_AREA", reader);
            SetEntityUti(entity, "CN_S_ITEM_CODE", "CN_S_ITEM_CODE", reader);
            SetEntityUti(entity, "CN_S_ITEM_NAME", "CN_S_ITEM_NAME", reader);
            SetEntityUti(entity, "CN_S_ITEM_STATE", "CN_S_ITEM_STATE", reader);
            SetEntityUti(entity, "CN_S_LOT_NO", "CN_S_LOT_NO", reader);
            SetEntityUti(entity, "CN_S_OWNER", "CN_S_OWNER", reader);
            SetEntityUti(entity, "CN_S_MODEL", "CN_S_MODEL", reader);
            SetEntityUti(entity, "CN_S_FIGURE_NO", "CN_S_FIGURE_NO", reader);
            SetEntityUti(entity, "CN_F_QUANTITY", "CN_F_QUANTITY", reader);
            SetEntityUti(entity, "CN_S_MEASURE_UNIT", "CN_S_MEASURE_UNIT", reader);
            SetEntityUti(entity, "CN_S_LOCATION_CODE", "CN_S_LOCATION_CODE", reader);
 
        }
 
        #region 根据盘点单号修改状态
        /// <summary>
        /// 根据盘点单号修改状态
        /// </summary>
        /// <param name="CN_S_OP_NO"></param>
        /// <param name="CN_S_STATE"></param>
        /// <returns></returns>
        /// <history>[HanHe(lt)] CREATED 2018/7/12</history>
        public SqlExecuteResult UpdateStateByNo(string CN_S_OP_NO, string CN_S_STATE, DbTransaction trans)
        {
            string sql = "UPDATE dbo.tn_wm_check_mst SET CN_S_STATE='{0}' WHERE CN_S_OP_NO IN ('{1}')";
            sql = string.Format(sql, CN_S_STATE, CN_S_OP_NO);
            DbCommand cmd = DataAccess.GetSqlStringCommand(sql);
            return ExecuteCommand(cmd, trans);
        }
        #endregion
 
        
        /// <summary>
        /// 更新数据
        /// </summary>
        /// <history>[HanHe(lt)] CREATED 2018/7/3</history>
        public OperateResult UpdateMstByOpNo(string state, string sqlwhere, IDbTransaction trans)
        {
            string sql = "update tn_wm_check_mst set CN_S_STATE='{0}' {1}";
            sql = string.Format(sql, state, sqlwhere);
            DbCommand cmd = DataAccess.GetSqlStringCommand(sql);
            return ExecuteTranSql(sql, null, trans);
        }
 
        #region 空货位 更新货位拓展表
        /// <summary>
        /// 更新货位拓展表
        /// </summary>
        /// <returns></returns>
        /// <history>[HanHe(lt)] CREATED 2018/12/20</history>
        public OperateResult UpdateLocationExt(string locationCodes, IDbTransaction trans)
        {
            string sql = @" UPDATE tn_wm_b_location_ext SET CN_S_USE_STATE='空' FROM tn_wm_b_location_ext AS a WITH (NOLOCK)
LEFT JOIN dbo.tn_wm_b_tray_location AS b WITH (NOLOCK)  ON a.CN_S_LOCATION_CODE=b.CN_S_LOCATION_CODE
WHERE a.CN_S_LOCATION_CODE IN ('" + locationCodes + "') AND b.CN_S_LOCATION_CODE IS NULL";
            return ExecuteTranSql(sql, null, trans);
        }
        #endregion
 
 
        #region 空货位 更新货位拓展表
        /// <summary>
        /// 更新货位拓展表
        /// </summary>
        /// <returns></returns>
        /// <history>[HanHe(lt)] CREATED 2018/12/20</history>
        public OperateResult DeleteTrayLocation(string trayCodes, IDbTransaction trans)
        {
            string sql = @" DELETE tn_wm_b_tray_location FROM tn_wm_b_tray_location AS a WITH (NOLOCK)
LEFT JOIN TN_WM_B_TRAY_ITEM_MST AS b WITH (NOLOCK) ON b.CN_S_TRAY_CODE = a.CN_S_TRAY_CODE
INNER JOIN dbo.tn_wm_tray_info AS c WITH (NOLOCK) ON c.CN_S_TRAY_CODE = a.CN_S_TRAY_CODE
WHERE CN_S_TRAY_TYPE='虚拟托盘' AND  a.CN_S_TRAY_CODE IN ('" + trayCodes + "') AND b.CN_S_TRAY_CODE IS NULL";
            return ExecuteTranSql(sql, null, trans);
        }
        #endregion
 
 
        /// <summary>
        /// 根据盘点单号获取盘点明细
        /// </summary>
        /// <param name="opNo"></param>
        /// <returns></returns>
        /// <history>[HanHe(dbs)] CREATED 2019/3/28</history>
        public List<TN_WM_CHECK_LISTEntity> GetCheckList(string opNo,string type)
        {
            string sql = string.Empty;
            if (type.Equals("货位盘点"))
            {
                sql = @"select b.CN_S_STOCK_AREA,a.CN_S_LOCATION_CODE,c.CN_S_TRAY_CODE,c.CN_S_TRAY_GRID,c.CN_S_ITEM_CODE,c.CN_S_ITEM_NAME,
                                c.CN_S_MODEL,c.CN_S_FIGURE_NO,c.CN_S_ITEM_STATE,c.CN_S_MEASURE_UNIT,c.CN_S_OWNER,sum(d.CN_F_QUANTITY) CN_F_QUANTITY, 
                                d.CN_S_PACKING_UNIT,d.CN_F_PACKING_QTY
                                from tn_wm_check_dtl a 
                                join tn_wm_b_tray_location b on a.CN_S_LOCATION_CODE=b.CN_S_LOCATION_CODE 
                                left join  TN_WM_B_TRAY_ITEM_MST c on b.CN_S_TRAY_CODE=c.CN_S_TRAY_CODE
                                join TN_WM_B_TRAY_ITEM_DTL d on  c.CN_GUID=d.CN_PARENT_GUID
                                where CN_S_OP_NO=@CN_S_OP_NO
                                group by b.CN_S_STOCK_AREA,a.CN_S_LOCATION_CODE,c.CN_S_TRAY_CODE,c.CN_S_TRAY_GRID,c.CN_S_ITEM_CODE,c.CN_S_ITEM_NAME,
                                c.CN_S_MODEL,c.CN_S_FIGURE_NO,c.CN_S_ITEM_STATE,c.CN_S_MEASURE_UNIT,c.CN_S_OWNER,
                                d.CN_S_PACKING_UNIT,d.CN_F_PACKING_QTY";
            }
            else if (type.Equals("物料盘点"))
            {
                sql = @"select 
                                d.CN_S_STOCK_AREA,d.CN_S_LOCATION_CODE,d.CN_S_TRAY_CODE,b.CN_S_TRAY_GRID,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,b.CN_S_MODEL,
                                b.CN_S_FIGURE_NO,b.CN_S_ITEM_STATE,b.CN_S_MEASURE_UNIT,b.CN_S_OWNER,sum(c.CN_F_QUANTITY) CN_F_QUANTITY,c.CN_S_PACKING_UNIT,c.CN_F_PACKING_QTY
                                from tn_wm_check_dtl a join TN_WM_B_TRAY_ITEM_MST b on a.CN_S_ITEM_CODE=b.CN_S_ITEM_CODE 
                                and a.CN_S_ITEM_STATE=b.CN_S_ITEM_STATE and a.CN_S_OWNER=b.CN_S_OWNER
                                join TN_WM_B_TRAY_ITEM_DTL c on b.CN_GUID=c.CN_PARENT_GUID
                                join tn_wm_b_tray_location d on b.CN_S_TRAY_CODE=d.CN_S_TRAY_CODE where CN_S_OP_NO=@CN_S_OP_NO
                                group by  d.CN_S_STOCK_AREA,d.CN_S_LOCATION_CODE,d.CN_S_TRAY_CODE,b.CN_S_TRAY_GRID,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,b.CN_S_MODEL,
                                b.CN_S_FIGURE_NO,b.CN_S_ITEM_STATE,b.CN_S_MEASURE_UNIT,b.CN_S_OWNER,c.CN_S_PACKING_UNIT,c.CN_F_PACKING_QTY";
            }
            return ExecuteQuery<TN_WM_CHECK_LISTEntity>(sql, new { CN_S_OP_NO = opNo });
        }
    }
}