chengsc
9 天以前 c9fe2c53364abe0e0e495a1b756267f865159e2e
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -12,6 +12,7 @@
using Newtonsoft.Json;
using SqlSugar;
using Utility;
using Utility.Tools;
using WMS.BLL.LogServer;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
@@ -839,23 +840,22 @@
                    throw Oops.Bah("储位信息不存在,请检查!");
                }
                //目标储位信息
                var storageLocatEnd = new SysStorageLocat();
                if (!string.IsNullOrEmpty(areaNo))
                //var storageLocatEnd = new SysStorageLocat();
                var storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0");
                if (storageLocatEnd == null)
                {
                    storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0");
                    if (storageLocatEnd == null)
                    {
                        throw Oops.Bah("目标储位信息不存在,请检查!");
                    }
                    throw Oops.Bah("目标储位信息不存在,请检查!");
                }
                //添加出库任务
                var taskNo = new Common().GetMaxNo("TK");
                var exTask = new LogTask
                var moveTask = new LogTask
                {
                    TaskNo = taskNo,
                    Sender = "WMS",
                    Receiver = "AGV",
                    Receiver = "WCS",
                    IsSuccess = 0, //是否下发成功 0失败 1成功
                    StartLocat = stockDetail.LocatNo,//起始位置
@@ -871,7 +871,7 @@
                    CreateTime = DateTime.Now
                };
                await Db.Insertable(exTask).ExecuteCommandAsync();
                await Db.Insertable(moveTask).ExecuteCommandAsync();
                //修改库存明细信息
                //stockDetail.Status = "4";//移库锁定
@@ -894,19 +894,22 @@
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId);
                var outDto = new List<OutCommandDto>();
                outDto.Add(new OutCommandDto()
                var outDto = new List<OutCommandDto>
                {
                    PalletNo = exTask.PalletNo,//托盘号
                    StartLocate = exTask.StartLocat, // 起始位置
                    StartRoadway = storageLocat.RoadwayNo,//其实巷道
                    EndLocate = EndLocat, // 目标位置
                    TaskNo = exTask.TaskNo, // 任务号
                    TaskType = "2",// 任务类型 (出库)0入 1出 2移
                    OutMode = "",  //出库口
                    Order = 1
                    new OutCommandDto()
                    {
                        TaskNo = moveTask.TaskNo, // 任务号
                        TaskType = "2",// 任务类型 0入 1出 2移
                        PalletNo = moveTask.PalletNo,//托盘号
                });
                        StartLocate = moveTask.StartLocat, // 起始位置
                        EndLocate = EndLocat, // 目标位置
                        Order = 999,
                        Type = PLCTypeEnum.AGV
                    }
                };
                // 正式运行程序放开
                var list2 = outDto.Select(m => m.TaskNo).ToList();
@@ -916,21 +919,21 @@
                try
                {
                    var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    //response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS");
                    response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS");
                    var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    //////解析返回数据
                    //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
                    //if (wcsModel.StatusCode == 0)
                    //{
                    //    //更改任务的发送返回时间//
                    new TaskServer().EditTaskIssueOk(list2, time1, time2);
                    //}
                    //if (wcsModel.StatusCode == -1)
                    //{
                    //    new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
                    //    throw new Exception(wcsModel.Msg);
                    //}
                    //解析返回数据
                    var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response);
                    if (wcsModel.code == 200)
                    {
                       // 更改任务的发送返回时间//
                        new TaskServer().EditTaskIssueOk(list2, time1, time2);
                    }
                    else
                    {
                        new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message);
                        throw new Exception(wcsModel.message);
                    }
                }
                catch (Exception ex)
                {
@@ -1111,16 +1114,16 @@
                endLocat = locatInfo2.LocatNo;
            }
            if (string.IsNullOrEmpty(endLocat))
            {
                var locatInfo3 = storageLocatList.Where(w => w.IsDel == "0" && w.Flag == "0")
                            .OrderByDescending(m => m.Layer).OrderByDescending(m => m.Column).OrderByDescending(m => m.Row).First();
            //if (string.IsNullOrEmpty(endLocat))
            //{
            //    var locatInfo3 = storageLocatList.Where(w => w.IsDel == "0" && w.Flag == "0")
            //                .OrderByDescending(m => m.Layer).OrderByDescending(m => m.Column).OrderByDescending(m => m.Row).First();
                if (locatInfo3 != null)
                {
                    endLocat = locatInfo3.LocatNo;
                }
            }
            //    if (locatInfo3 != null)
            //    {
            //        endLocat = locatInfo3.LocatNo;
            //    }
            //}
            return endLocat;
        }
        #endregion
@@ -1214,7 +1217,7 @@
        /// <param name="boxNo"></param>
        /// <param name="devanQty"></param>
        /// <param name="userId"></param>
        public void AddLableByDevanning(string boxNo, decimal devanQty, int userId)
        public BoxListInfoDto AddLableByDevanning(string boxNo, decimal devanQty, int userId)
        {
            try
            {
@@ -1290,6 +1293,24 @@
                new OperationCrServer().AddLogOperationCr("库内作业", "操作日志", boxNo, "编辑", $"拆箱贴标:原箱码:{boxNo}拆箱,添加新箱码{boxNoNew}", userId);
                //提交事务
                Db.CommitTran();
                #region 获取拆箱的信息打印
                var data = new BoxListInfoDto()
                {
                    SkuNo = boxInfo.SkuNo,
                    SkuName = boxInfo.SkuName,
                    LotNo = boxInfo.LotNo,
                    BoxNoList = new List<string>() { boxNoNew } ,
                    Date1 = boxInfo.ProductionTime.ToString(),
                    Date2 = boxInfo.ExpirationTime.ToString(),
                };
                #endregion
                return data;
            }
            catch (Exception e)
            {
@@ -1318,15 +1339,15 @@
                {
                    throw new Exception("托盘没有出库单信息");
                }
                var task = Db.Queryable<LogTask>().First(m => m.PalletNo == palletNo && m.IsDel == "0" && m.Status == "5");
                if (task == null)
                {
                    throw new Exception("没有查询到托盘任务信息");
                }
                if (task.Status != "5")
                {
                    throw new Exception("任务状态不是等待确认");
                }
                //var task = Db.Queryable<LogTask>().First(m => m.PalletNo == palletNo && m.IsDel == "0" && m.Status == "5");
                //if (task == null)
                //{
                //    throw new Exception("没有查询到托盘任务信息");
                //}
                //if (task.Status != "5")
                //{
                //    throw new Exception("任务状态不是等待确认");
                //}
                return detail;
            }
            catch (Exception e)
@@ -1346,20 +1367,26 @@
            try
            {
                Db.BeginTran();
                var task = Db.Queryable<LogTask>().First(m => m.PalletNo == palletNo && m.IsDel == "0" && m.Status == "5");
                if (task == null)
                //var task = Db.Queryable<LogTask>().First(m => m.PalletNo == palletNo && m.IsDel == "0" && m.Status == "5");
                //if (task == null)
                //{
                //    throw new Exception("没有查询到托盘任务信息");
                //}
                //if (task.Status != "5")
                //{
                //    throw new Exception("任务状态不是等待确认");
                //}
                ////任务状态变更为执行完成
                //task.Status = "2";
                //Db.Updateable(task).ExecuteCommand();
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
                if (stockDetail.Count == 0)
                {
                    throw new Exception("没有查询到托盘任务信息");
                    throw new Exception("库存托盘没有信息");
                }
                if (task.Status != "5")
                {
                    throw new Exception("任务状态不是等待确认");
                }
                //任务状态变更为执行完成
                task.Status = "2";
                Db.Updateable(task).ExecuteCommand();
                var locatList = Db.Queryable<SysStorageLocat>().Where(m=>m.WareHouseNo == "W04" && (m.AreaNo == "B06" || m.AreaNo == "B07") && m.IsDel == "0").ToList();
                var locat = locatList.FirstOrDefault(m => m.LocatNo == task.EndLocat);
                var locate = stockDetail.First().LocatNo;
                var locatList = Db.Queryable<SysStorageLocat>().Where(m=>m.WareHouseNo == "W04" && (m.AreaNo == "B06" || m.AreaNo == "B07" || m.AreaNo == "B09") && m.IsDel == "0").ToList();
                var locat = locatList.FirstOrDefault(m => m.LocatNo == locate);
                //判断托盘储位是否在车间
                if (locat == null)
                {
@@ -1368,7 +1395,7 @@
                locat.Status = "0";
                Db.Updateable(locat).ExecuteCommand();
                //判断托盘信息
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
                foreach (var item in stockDetail)
                {
                    if (item.UDF5 != "1" || string.IsNullOrWhiteSpace(item.SONo))
@@ -1380,7 +1407,7 @@
                    //item.RoadwayNo = "";
                    //item.AreaNo = "";
                    item.LocatNo = "";
                    item.PalletNo = "";
                    //item.PalletNo = "";
                    item.LockQty = 0; // 锁定数量更为0
                    item.Status = "0"; // 状态变为待分配
                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.StockDetailId == item.Id).ToList();
@@ -1393,15 +1420,15 @@
                }
                Db.Updateable(stockDetail).ExecuteCommand();
                //托盘变更状态
                var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
                if (pallet == null)
                {
                    throw new Exception("没有查询到托盘信息");
                }
                pallet.Status = "0";
                Db.Updateable(pallet).ExecuteCommand();
                //var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
                //if (pallet == null)
                //{
                //    throw new Exception("没有查询到托盘信息");
                //}
                //pallet.Status = "0";
                //Db.Updateable(pallet).ExecuteCommand();
                //添加操作日志
                new OperationCrServer().AddLogOperationCr("库内作业", "操作日志", palletNo, "编辑", $"车间收货:{palletNo}托盘收货", userId);
                new OperationCrServer().AddLogOperationCr("PDA模块", "车间收货", palletNo, "完成", $"车间收货:{palletNo}托盘收货", userId);
                Db.CommitTran();
            }
            catch (Exception e)
@@ -1415,5 +1442,302 @@
        #endregion
        #region 物料拆托 (标签、数量)
        /// <summary>
        /// 查询箱信息
        /// </summary>
        /// <param name="boxNo"></param>
        /// <param name="pallNo"></param>
        public void GetBoxInfo(string boxNo,string pallNo)
        {
            try
            {
                var boxInfo = Db.Queryable<DataBoxInfo>().Where(m=>m.IsDel == "0" && m.BoxNo == boxNo).ToList();
                if (!string.IsNullOrWhiteSpace(pallNo))
                {
                    boxInfo = boxInfo.Where(m=>m.PalletNo == pallNo).ToList();
                }
                if (boxInfo.Count!=1)
                {
                    throw new Exception("标签信息错误,请联系管理员");
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        public void UpPalletByBox(string boxNo,string pallet,string palletNew,int userId)
        {
            try
            {
                Db.BeginTran();
                if (string.IsNullOrWhiteSpace(boxNo) || string.IsNullOrWhiteSpace(pallet) || string.IsNullOrWhiteSpace(palletNew))
                {
                    throw new Exception("参数错误,托盘、新托盘、箱码均不能为空");
                }
                var boxInfoList = Db.Queryable<DataBoxInfo>().Where(m=>m.IsDel == "0" && m.BoxNo == boxNo).ToList();
                if (boxInfoList.Count != 1)
                {
                    throw new Exception("标签信息数量不是1条");
                }
                var boxInfo = boxInfoList.First();
                var detail1 = Db.Queryable<DataStockDetail>().First(m=>m.IsDel == "0" && m.PalletNo == pallet && m.Id == boxInfo.StockDetailId );
                if (detail1 == null)
                {
                    throw new Exception("未查询到托盘和箱码的库存明细");
                }
                var palletInfoNew = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNew);
                if (palletInfoNew == null)
                {
                    throw new Exception("未查询到新托盘信息");
                }
                var detailNewBl = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNew && (m.SkuNo != boxInfo.SkuNo || m.LotNo != boxInfo.LotNo));
                if (detailNewBl!=null)
                {
                    throw new Exception("新托盘上已有其他物料箱信息");
                }
                //添加/更新库存托盘信息
                var detailNew1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNew && m.SkuNo == boxInfo.SkuNo && m.LotNo == boxInfo.LotNo);
                var newId = 0;
                if (detailNew1 == null)//add
                {
                    var detailNew = new DataStockDetail();
                    detailNew.SkuNo = detail1.SkuNo;
                    detailNew.SkuName = detail1.SkuName;
                    detailNew.LotNo = detail1.LotNo;
                    detailNew.LotText = detail1.LotText;
                    detailNew.SupplierLot = detail1.SupplierLot;
                    detailNew.SupplierNo = detail1.SupplierNo;
                    detailNew.SupplierName = detail1.SupplierName;
                    detailNew.Standard = detail1.Standard;
                    detailNew.Qty = boxInfo.Qty;
                    detailNew.LockQty = 0;
                    detailNew.FrozenQty = 0;
                    detailNew.InspectQty = 0;
                    detailNew.ASNNo = "";
                    detailNew.PalletNo = palletNew;
                    detailNew.ProductionTime = detail1.ProductionTime;
                    detailNew.ExpirationTime = detail1.ExpirationTime;
                    detailNew.PalletTags = "0";
                    detailNew.CompleteTime = DateTime.Now;
                    detailNew.Status = "0";
                    detailNew.InspectMark = detail1.InspectMark;
                    detailNew.BitPalletMark = "1";
                    detailNew.InspectStatus = detail1.InspectStatus;
                    detailNew.PackagNo = detail1.PackagNo;
                    detailNew.IsBale = detail1.IsBale;
                    detailNew.IsBelt = detail1.IsBelt;
                    detailNew.IsDel = "0";
                    detailNew.CreateTime = DateTime.Now;
                    detailNew.CreateUser = 0;
                    newId = Db.Insertable(detailNew).ExecuteReturnIdentity();
                }
                else //update
                {
                    detailNew1.Qty += boxInfo.Qty;
                    detailNew1.PalletNo = palletNew;
                    Db.Updateable(detailNew1).ExecuteCommand();
                    newId = detailNew1.Id;
                }
                //更新托盘状态
                palletInfoNew.Status = "1";
                Db.Updateable(palletInfoNew).ExecuteCommand();
                //更改原托盘信息
                detail1.Qty -= boxInfo.Qty;
                detail1.BitPalletMark = "1";
                if (detail1.Qty <= 0)
                {
                    //更新原托盘状态
                    var palletInfo = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == pallet);
                    palletInfo.Status = "0";
                    Db.Updateable(palletInfo).ExecuteCommand();
                    Db.Deleteable(detail1).ExecuteCommand();
                }
                else
                {
                    Db.Updateable(detail1).ExecuteCommand();
                }
                //更新库存箱信息
                boxInfo.StockDetailId = newId;
                boxInfo.BindNo = 0;
                boxInfo.PalletNo = palletNew;
                Db.Updateable(boxInfo).ExecuteCommand();
                //添加操作日志
                new OperationCrServer().AddLogOperationCr("库内作业", "操作日志", boxNo, "编辑", $"物料拆托:箱码:{boxNo}换托,原托盘{pallet},新托盘{palletNew}", userId);
                Db.CommitTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        //数量页签-----------------------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// 根据托盘获取托盘上的物料批次信息
        /// </summary>
        /// <param name="palletNo"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public List<SelectSkuLotNo> GetSelectSkuLotNo(string palletNo)
        {
            try
            {
                var data = new List<SelectSkuLotNo>();
                var detailList = Db.Queryable<DataStockDetail>().Where(m=>m.IsDel == "0" && m.PalletNo == palletNo).ToList();
                foreach (var item in detailList)
                {
                    if (data.Count(m=>m.DetailId == item.Id.ToString()) == 0)
                    {
                        data.Add(new SelectSkuLotNo()
                        {
                            SkuNo = item.SkuNo,
                            SkuName = item.SkuName,
                            LotNo = item.LotNo,
                            DetailId = item.Id.ToString(),
                        });
                    }
                }
                return data;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 拆托-数量
        /// </summary>
        /// <param name="palletNo"></param>
        /// <param name="palletNoNew"></param>
        /// <param name="detailId"></param>
        /// <param name="qty"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        public void UpPalletByQty(string palletNo,string palletNoNew,string detailId,decimal qty,int userId)
        {
            try
            {
                Db.BeginTran();
                if (string.IsNullOrWhiteSpace(detailId) || string.IsNullOrWhiteSpace(palletNo) || string.IsNullOrWhiteSpace(palletNoNew))
                {
                    throw new Exception("参数错误,托盘、新托盘、物料批次均不能为空");
                }
                if (qty<=0)
                {
                    throw new Exception("参数数量不能为小等0");
                }
                 var detailId2 = int.Parse(detailId);
                var detail1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && m.Id == detailId2);
                if (detail1 == null)
                {
                    throw new Exception("未查询到托盘库存明细");
                }
                var palletInfoNew = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew);
                if (palletInfoNew == null)
                {
                    throw new Exception("未查询到新托盘信息");
                }
                //添加/更新库存托盘信息
                var detailNew1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo == detail1.SkuNo && m.LotNo == detail1.LotNo);
                var newId = 0;
                if (detailNew1 == null)//add
                {
                    var detailNew = new DataStockDetail();
                    detailNew.SkuNo = detail1.SkuNo;
                    detailNew.SkuName = detail1.SkuName;
                    detailNew.LotNo = detail1.LotNo;
                    detailNew.LotText = detail1.LotText;
                    detailNew.SupplierLot = detail1.SupplierLot;
                    detailNew.SupplierNo = detail1.SupplierNo;
                    detailNew.SupplierName = detail1.SupplierName;
                    detailNew.Standard = detail1.Standard;
                    detailNew.Qty = qty;
                    detailNew.LockQty = 0;
                    detailNew.FrozenQty = 0;
                    detailNew.InspectQty = 0;
                    detailNew.ASNNo = "";
                    detailNew.PalletNo = palletNoNew;
                    detailNew.ProductionTime = detail1.ProductionTime;
                    detailNew.ExpirationTime = detail1.ExpirationTime;
                    detailNew.PalletTags = "0";
                    detailNew.CompleteTime = DateTime.Now;
                    detailNew.Status = "0";
                    detailNew.InspectMark = detail1.InspectMark;
                    detailNew.BitPalletMark = "1";
                    detailNew.InspectStatus = detail1.InspectStatus;
                    detailNew.PackagNo = detail1.PackagNo;
                    detailNew.IsBale = detail1.IsBale;
                    detailNew.IsBelt = detail1.IsBelt;
                    detailNew.IsDel = "0";
                    detailNew.CreateTime = DateTime.Now;
                    detailNew.CreateUser = 0;
                    newId = Db.Insertable(detailNew).ExecuteReturnIdentity();
                }
                else //update
                {
                    detailNew1.Qty += qty;
                    detailNew1.PalletNo = palletNoNew;
                    Db.Updateable(detailNew1).ExecuteCommand();
                    newId = detailNew1.Id;
                }
                //更新托盘状态
                palletInfoNew.Status = "1";
                Db.Updateable(palletInfoNew).ExecuteCommand();
                //更改原托盘信息
                detail1.Qty -= qty;
                detail1.BitPalletMark = "1";
                if (detail1.Qty <= 0)
                {
                    //更新原托盘状态
                    var palletInfo = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
                    palletInfo.Status = "0";
                    Db.Updateable(palletInfo).ExecuteCommand();
                    Db.Deleteable(detail1).ExecuteCommand();
                }
                else
                {
                    Db.Updateable(detail1).ExecuteCommand();
                }
                //添加操作日志
                new OperationCrServer().AddLogOperationCr("库内作业", "操作日志", palletNo, "编辑", $"物料拆托:{detail1.SkuName}物料换托,原托盘{palletNo},新托盘{palletNoNew}", userId);
                Db.CommitTran();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        #endregion
    }
}