zhaowc
2025-04-07 d64f81bccb25c98261b84a4355f92c3b32470606
Wms/WMS.BLL/DataServer/StockServer.cs
@@ -9,6 +9,7 @@
using Model.InterFaceModel;
using Model.ModelDto;
using Model.ModelDto.DataDto;
using Model.ModelDto.LogDto;
using Model.ModelDto.SysDto;
using Model.ModelVm.DataVm;
using Newtonsoft.Json;
@@ -89,9 +90,35 @@
            //库存总量
            List<MateDataStockDto> StockListDto = new List<MateDataStockDto>();
            DataStockDetail detail = new DataStockDetail();
            foreach (var item in StockList)
            {
                detail = Db.Queryable<DataStockDetail>().First(w => w.SkuNo == item.SkuNo && w.LotNo == item.LotNo && w.IsDel == "0");
                if (detail != null)
                {
                    if (!string.IsNullOrEmpty(detail.ProductionTime.ToString()))
                    {
                        item.ProductionTime = (DateTime)detail.ProductionTime;
                    }
                    else
                    {
                        item.ProductionTime = null;
                    }
                    if (!string.IsNullOrEmpty(detail.ExpirationTime.ToString()))
                    {
                        item.ExpirationTime = (DateTime)detail.ExpirationTime;
                    }
                    else
                    {
                        item.ExpirationTime = null;
                    }
                    item.InspectStatus = detail.InspectStatus;
                }
                StockListDto.Add(item);
                ////判断库存总量是否拥有物料
                //if (StockListDto.Count > 0)
@@ -237,10 +264,70 @@
                categoryNo = categoryNo,                //逻辑库区
                type = type
            });
            foreach (var item in stockDetailsList)
            {
                if (!string.IsNullOrEmpty(item.LocatNo))
                {
                    if (item.WareHouseNo == "W01")
                    {
                        item.PLCLocatNo = GetDjAdress(item.LocatNo.Substring(1, 2), item.LocatNo.Substring(0, 2), item.LocatNo.Substring(6, 2)).ToString() + item.LocatNo.Substring(2, 2) + item.LocatNo.Substring(4, 2);
                    }
                }
            }
            return stockDetailsList;
        }
        #endregion
        /// <summary>
        /// 根据储位排获取跺机对应的地址排03010302
        /// </summary>
        /// <param name="road">排02</param>
        /// <param name="pai">排03</param>
        /// <param name="dept">深度02</param>
        /// <returns></returns>
        public static int GetDjAdress(string road, string pai, string dept)
        {
            var roadNum = int.Parse(road);
            var paiNum = int.Parse(pai);
            var deptNum = int.Parse(dept);
            var paiVal = 0;
            // 判断排奇偶数
            if (paiNum % 2 == 0)
            {
                if (deptNum == 1)
                {
                    paiVal = 3;
                }
                else
                {
                    paiVal = 4;
                }
            }
            else
            {
                if (deptNum == 1)
                {
                    paiVal = 2;
                }
                else
                {
                    paiVal = 1;
                }
            }
            if (paiVal == 0)
            {
                throw new Exception("排转换失败");
            }
            return paiVal;
        }
        #region 低库存预警
@@ -364,9 +451,12 @@
                //startTime = startTime,
                //endTime = endTime
            });
            DataStock stock = new DataStock();
            stock = Db.Queryable<DataStock>().First();
            //合并数据
            int a = 0;
            decimal qty = 0;
            foreach (var h in totalHListData)
            {
                if (a >= totalCListData.Count)
@@ -375,16 +465,23 @@
                }
                foreach (var c in totalCListData)
                {
                    //判断出库是否拥有相同批次 且物料相同
                    if (h.LotNo == c.LotNo)
                    {
                        if (h.SkuNo == c.SkuNo && h.SkuName == c.SkuName)
                        {
                            stock = Db.Queryable<DataStock>().First(w=>w.SkuNo == h.SkuNo && w.SkuName == h.SkuName && w.LotNo == h.LotNo && w.IsDel == "0");
                            if (stock != null)
                            {
                                qty = stock.Qty;
                            }
                            h.CQty = c.CQty; //出库数量
                            h.CAllotQty = c.CAllotQty; //分配数量
                            h.CFactQty = c.CFactQty; //下架数量
                            h.CompleteQty = c.CompleteQty; //拣货数量
                            //h.SONo = c.SONo; //出库单号
                            h.Qty = qty;  //当前库存
                            a += 1;
@@ -1101,7 +1198,10 @@
                }
                #endregion
                palletNo.IsCancel = 0;
                palletNo.IsSend = 0;
                palletNo.IsFinish = 0;
                Db.Updateable(palletNo).ExecuteCommand();
                Db.CommitTran();
@@ -1353,12 +1453,12 @@
                        }
                    }
                }
                else
                else
                {
                    storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取起始库位信息
                    if (storageStart == null)
                    {
                        throw new Exception("未找到相应的起始库位");
                        isstock = 2; //库口到缓存位任务
                    }
                }
                //var soAllot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo);//获取分配信息
@@ -1377,13 +1477,13 @@
                if (isstock == 1)
                {
                    startLocat = Db.Queryable<SysStorageLocat>().First(w=> w.IsDel == "0" && w.LocatNo == palletNo.StartLocat);
                    startLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat);
                    //修改起始库位状态
                    startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 
                    Db.Updateable(startLocat).ExecuteCommand();
                    //调用MES备料反馈完成接口
                    #region  MES备料完成反馈
                    #region
                    var data = new List<RequertBeiliaoInfoModel>();
                    //更改库存明细
@@ -1472,7 +1572,7 @@
                            case "1":
                                endlono = "Y003_0" + endLocat.LocatNo.ToString().Substring(5, 2);
                                break;
                        }
                        var mescode = Db.Queryable<BllExportNotice>().Where(w => w.SONo == stockDetail.First().SONo).First();
                        var mesData = new RequertBeiliaoModel()
@@ -1495,7 +1595,7 @@
                    }
                    #endregion
                }
                else  //空托盘处理
                else if (isstock == 0)
                {
                    //修改组托信息
                    if (bindDetail.WareHouseNo == "W01") //1、空托盘垛到空托盘收集器;
@@ -1524,7 +1624,25 @@
                        }
                    }
                    Db.Updateable(bindDetail).ExecuteCommand();
                }
                else //库口移库到缓存位
                {
                    foreach (var item in stockDetail)
                    {
                        item.LocatNo = endLocat.LocatNo;//储位更改
                        item.WareHouseNo = endLocat.WareHouseNo;//所属仓库更改
                        item.RoadwayNo = endLocat.RoadwayNo;//所属巷道更改
                        item.AreaNo = endLocat.AreaNo;//所属区域更改
                        Db.Updateable(item).ExecuteCommand();
                    }
                }
                palletNo.IsCancel = 0;
                palletNo.IsSend = 0;
                palletNo.IsFinish = 0;
                Db.Updateable(palletNo).ExecuteCommand();
                Db.CommitTran();
            }
            catch (Exception ex)
@@ -1535,7 +1653,7 @@
        }
        #endregion
        #region 数字孪生系统获取库存信息
        #region 数字孪生系统反馈信息
        /// <summary>
        /// 反馈数字孪生系统库存信息
@@ -1583,6 +1701,170 @@
                throw new Exception("返回库存信息有误,错误信息:" + ex);
            }
        }
        /// <summary>
        /// 反馈数字孪生系统操作信息
        /// </summary>
        /// <param name=""></param>
        /// <returns></returns>
        public List<ReLogDataModel> GetLogDataList()
        {
            try
            {
                //库存信息
                var stockDetailsList = Db.Queryable<DataStockDetail>().ToList();
                var sql = "select LocatNo,PalletNo,SkuName,Standard,LotNo,InspectStatus,Qty,ExpirationTime as Warranty from DataStockDetail ";
                var item2 = Expressionable.Create<LogOperationSO>()
                   .And(it => it.IsDel == "0")
                   .ToExpression();//注意 这一句 不能少
                var list2 = Db.Queryable<LogOperationSO>().Where(item2)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                List<ReLogDataModel> list = Db.Ado.SqlQuery<ReLogDataModel>(sql);
                return list;
            }
            catch (Exception ex)
            {
                throw new Exception("返回库存信息有误,错误信息:" + ex);
            }
        }
        /// <summary>
        /// 查询操作日志
        /// </summary>
        /// <param name="menuName">菜单名称</param>
        /// <param name="type">类型</param>
        /// <returns></returns>
        public List<OperationDto> ReLogData()
        {
            try
            {
                var total = 0;
                #region asn
                var item = Expressionable.Create<LogOperationASN>()
                    .And(it => it.IsDel == "0")
                    .ToExpression();//注意 这一句 不能少
                var list = Db.Queryable<LogOperationASN>().Where(item)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                #region so
                var item2 = Expressionable.Create<LogOperationSO>()
                   .And(it => it.IsDel == "0")
                   .ToExpression();//注意 这一句 不能少
                var list2 = Db.Queryable<LogOperationSO>().Where(item2)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                #region cr
                var item3 = Expressionable.Create<LogOperationCR>()
                    .And(it => it.IsDel == "0")
                    .ToExpression();//注意 这一句 不能少
                var list3 = Db.Queryable<LogOperationCR>().Where(item3)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                #region sys
                var item4 = Expressionable.Create<LogOperationSys>()
                    .ToExpression();//注意 这一句 不能少
                var list4 = Db.Queryable<LogOperationSys>().Where(item4)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                var data = Db.UnionAll(list, list2, list3, list4).OrderByDescending(it => it.CreateTime);
                return data.OrderByDescending(m => m.CreateTime).ToList();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        #endregion
    }
}