wxw
3 天以前 e9e24ec8741b0a813c43093a1af3be800c1dc0a5
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
using Model.ModelDto.DataDto;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Utility;
using WMS.DAL;
using WMS.Entity.BllCheckEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
using WMS.Entity.SysEntity;
using WMS.IBLL.IBllCheckServer;
 
namespace WMS.BLL.BllCheckServer
{
    public class StockFreectSetve : DbHelper<BllStockCheck>, IStockFreectSetve
    {
        private static readonly SqlSugarScope Db = DataContext.Db;
        public StockFreectSetve() : base(Db)
        {
        }
 
        #region 冻结\解冻
 
        public async Task<List<DataStock>> ByTypeGetDataStockType(string SkuNo, int type)
        {
            var list = await Db.Queryable<DataStock>().Where(a => a.IsDel == "0" && a.SkuNo != "100099" && type == 1 ? (a.Qty - a.LockQty - a.FrozenQty) > 0 : type == 2 ? a.FrozenQty > 0 : a.Id < 0).ToListAsync();
            //var sku = Db.Queryable<SysMaterials>().WhereIF(!string.IsNullOrWhiteSpace(SkuNo), a => a.SkuNo.Contains(SkuNo)).Where(a => list.Contains(a.SkuNo)).ToList();
 
            return list;
        }
 
        /// <summary>
        /// 获取库存冻结信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<List<FreezeUnfreezeInfoDto>> GetDataFreezeList(FreezeUnfreezeInfoDto model)
        {
            return await Db.Queryable<DataFreezeUnfreezeInfo>()
                           .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
                           .Where(a => a.IsDel == "0" && a.Status == 1)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.SkuNo), a => a.SkuNo.Contains(model.SkuNo))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.SkuName), a => a.SkuName.Contains(model.SkuName))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.LotNo), a => a.LotNo.Contains(model.LotNo))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.Type), a => a.Type == model.Type)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.Demo), a => a.Demo == model.Demo)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.StartTime), a => SqlFunc.GreaterThanOrEqual(a.CreateTime, model.StartTime))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.EndTime), a => SqlFunc.LessThanOrEqual(a.CreateTime, model.EndTime))
                           .Select<FreezeUnfreezeInfoDto>((a, b) => new FreezeUnfreezeInfoDto()
                           {
                               UserName = b.RealName
                           }, true)
                           .ToListAsync();
        }
 
        /// <summary>
        /// 获取库存解冻信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<List<FreezeUnfreezeInfoDto>> GetDataUnFreezeList(FreezeUnfreezeInfoDto model)
        {
            return await Db.Queryable<DataFreezeUnfreezeInfo>()
                           .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
                           .Where(a => a.IsDel == "0" && a.Status == 2)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.SkuNo), a => a.SkuNo.Contains(model.SkuNo))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.SkuName), a => a.SkuName.Contains(model.SkuName))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.LotNo), a => a.LotNo.Contains(model.LotNo))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.Type), a => a.Type == model.Type)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.Demo), a => a.Demo == model.Demo)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.StartTime), a => SqlFunc.GreaterThanOrEqual(a.CreateTime, model.StartTime))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.EndTime), a => SqlFunc.LessThanOrEqual(a.CreateTime, model.EndTime))
                           .Select<FreezeUnfreezeInfoDto>((a, b) => new FreezeUnfreezeInfoDto()
                           {
                               UserName = b.RealName
                           }, true)
                           .ToListAsync();
        }
 
        /// <summary>
        /// 添加冻结\解冻信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<string> InsertDataFreezeInfo(FreezeUnfreezeInfoDto model)
        {
            try
            {
                string errStr = "";
                var TimeStr = Db.GetDate();
                //验证批次与物料是否为异常
                var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.LotNo == model.LotNo && a.SkuNo == model.SkuNo);
                //当前物料或批次存在异常
                if (stock == null)
                {
                    throw Oops.Bah("-1:当前物料或批次存在异常!");
                }
                //验证物料信息是否存在异常
                var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == model.SkuNo);
                if (sku == null)
                {
                    throw Oops.Bah("-1:当前物料信息存在异常!");
                }
                //冻结
                if (model.Status == 1)
                {
                    //验证冻结数量是否小于当前库存-锁定-冻结数量
                    if (model.FrozenQty <= 0)
                    {
                        throw Oops.Bah("-1:当前想要冻结的数量不可为0!");
                    }
                    //验证冻结数量是否小于当前库存-锁定-冻结数量
                    if (model.FrozenQty > (stock.Qty - stock.LockQty - stock.FrozenQty))
                    {
                        throw Oops.Bah("-1:当前想要冻结的数量大于库存可冻结数量!");
                    }
                    //验证原因是否为空
                    if (string.IsNullOrWhiteSpace(model.Demo))
                    {
                        throw Oops.Bah("-1:冻结原因不可为空!");
                    }
 
 
                }
                // 解冻
                else if (model.Status == 2)
                {
                    //验证冻结数量是否小于当前库存-锁定-冻结数量
                    if (model.FrozenQty <= 0)
                    {
                        throw Oops.Bah("-1:当前想要冻结的数量不可为0!");
                    }
                    //验证冻结数量是否小于当前库存冻结数量
                    if (model.FrozenQty > model.Qty)
                    {
                        throw Oops.Bah("-1:当前想要解冻的数量必须小于库存冻结数量!");
                    }
 
                }
 
                Db.BeginTran(); //开启
 
                //添加冻结\解冻信息
                DataFreezeUnfreezeInfo list = new DataFreezeUnfreezeInfo()
                {
                    SkuNo = model.SkuNo, //物料编码
                    SkuName = model.SkuName, //物料名称
                    Standard = stock.Standard, //规格
                    Type = sku.Type, //物料类型
                    Qty = stock.Qty, //库存当前数量
                    FrozenQty = model.FrozenQty, //冻结数量
                    LotNo = stock.LotNo, //批次
                    LotText = stock.LotText, //批次描述
                    SupplierLot = stock.SupplierLot, //供货批次
                    Status = model.Status, //状态
                    Demo = model.Demo, //原因
 
                    IsDel = "0",
                    CreateTime = TimeStr, //时间
                    CreateUser = model.CreateUser, //冻结人
                };
 
                //修改库存信息
                if (model.Status == 1)
                {
                    stock.FrozenQty += (decimal)model.FrozenQty;
                }
                if (model.Status == 2)
                {
                    stock.FrozenQty -= (decimal)model.FrozenQty;
                }
 
                await Db.Insertable(list).ExecuteCommandAsync();
                await Db.Updateable(stock).ExecuteCommandAsync();
 
 
                Db.CommitTran(); //提交
 
                errStr = model.Status == 0 ? "添加冻结信息成功!" : "添加解冻信息成功!";
                return errStr;
            }
            catch (Exception ex)
            {
                Db.RollbackTran(); //回滚
 
                throw ex;
            }
        }
 
        #endregion
    }
}