wxw
9 小时以前 54c9cb77e93d08bc330b9a421e6232b7f7bba57a
Wms/WMS.BLL/HttpServer.cs
@@ -6,6 +6,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Utility.Tools;
using WMS.BLL.Logic;
using WMS.BLL.LogServer;
@@ -35,7 +36,7 @@
                #region 判断
                if (string.IsNullOrEmpty(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                    throw new Exception("托盘号不能为空!");
                }
                if (string.IsNullOrEmpty(houseNo))
                {
@@ -144,7 +145,12 @@
                for (int i = 1; i <= 2; i++)
                {
                    var iStr = i.ToString();
                    locate = allotLocate.GetSuiTableLocate(houseNo, areaList, "", iStr);
                    try
                    {
                        locate = allotLocate.GetSuiTableLocate(houseNo, areaList, "", iStr);
                    }
                    catch (Exception e)
                    { }
                    if (locate != null)
                    {
                        break;
@@ -840,7 +846,15 @@
                var roadStr = Db.Queryable<SysStorageRoadway>().Where(m => m.IsDel == "0" && m.Status == "0").Select(m=>m.RoadwayNo).ToList();
                //巷道组信息
                var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) && !string.IsNullOrWhiteSpace(m.RoadwayNo) && roadStr.Contains(m.RoadwayNo))
                    .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
                    .GroupBy(m => m.RoadwayNo)
                    .Select(m => m.RoadwayNo)
                    .ToList()
                    .OrderBy(roadwayNo =>
                    {
                        // 移除所有非数字字符,只保留数字
                        var numbersOnly = new string(roadwayNo.Where(char.IsDigit).ToArray());
                        return int.TryParse(numbersOnly, out int result) ? result : 0;
                    }).ToList();
                #endregion
@@ -1763,9 +1777,9 @@
                    {
                        throw new Exception("储位损坏不能出库");
                    }
                    if (locate.WareHouseNo != "W02")
                    if (locate.WareHouseNo != "W02" && locate.WareHouseNo != "W04")
                    {
                        throw new Exception("托盘不在货架库上");
                        throw new Exception("托盘不在货架库上也不在平库");
                    }
                    var locateEnd = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == outModeLocate && m.IsDel == "0");//当前出库的目标储位信息
                    if (locateEnd == null)
@@ -1778,11 +1792,16 @@
                        if (logEnd != null && logEnd.PalletNo != palletNo)
                        {
                            throw new Exception("目标储位状态不是空储位");
                        }
                        }
                        var detailEnd = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == locateEnd.LocatNo);
                        if (detailEnd != null && detailEnd.PalletNo != palletNo)
                        {
                            throw new Exception("目标储位状态不是空储位");
                        }
                    }
                    #endregion
                    if (locate.Status == "1") //有物品
                    if (locate.WareHouseNo == "W02" && locate.Status == "1") //有物品
                    {
                        #region 添加出库任务
@@ -1861,9 +1880,9 @@
                        Db.Updateable(item).ExecuteCommand();
                        #endregion
                    }
                    else if (locate.Status == "3") //出库中
                    else if (locate.Status == "3" || locate.WareHouseNo == "W04") //出库中或已在平库
                    {
                        #region 改变数据
                        //判断是否是已经出过库又回库(状态为待拣货的 1)
@@ -1887,21 +1906,31 @@
                                }
                            }
                        }
                        var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo);
                        if (taskNo == null)
                        if (locate.WareHouseNo == "W04")
                        {
                            taskNo = logTaskList.FirstOrDefault(m => m.PalletNo == item.PalletNo);//当前有同托盘不同物料出库
                            item.TaskNo = "";
                            item.Status = "2"; // 出库分配信息状态改为正在执行
                            item.OutMode = item.OutMode;//出库口
                            //item.UnstackingMode = unstackingMode2;//拆垛模式
                            Db.Updateable(item).ExecuteCommand();
                        }
                        if (taskNo == null)
                        else
                        {
                            throw new Exception($"托盘号:{item.PalletNo},出库异常");
                        }
                        item.TaskNo = taskNo.TaskNo;
                        item.Status = "1"; // 出库分配信息状态改为正在执行
                        item.OutMode = item.OutMode;//出库口
                        //item.UnstackingMode = unstackingMode2;//拆垛模式
                        Db.Updateable(item).ExecuteCommand();
                            var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo);
                            if (taskNo == null)
                            {
                                taskNo = logTaskList.FirstOrDefault(m => m.PalletNo == item.PalletNo);//当前有同托盘不同物料出库
                            }
                            if (taskNo == null)
                            {
                                throw new Exception($"托盘号:{item.PalletNo},出库异常");
                            }
                            item.TaskNo = taskNo.TaskNo;
                            item.Status = "1"; // 出库分配信息状态改为正在执行
                            item.OutMode = item.OutMode;//出库口
                            //item.UnstackingMode = unstackingMode2;//拆垛模式
                            Db.Updateable(item).ExecuteCommand();
                        }
                        #endregion
                    }
                    else if (locate.Status == "5") //移出中
@@ -1964,7 +1993,64 @@
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// PDA平库下发出库
        /// </summary>
        /// <param name="soNo"></param>
        /// <param name="detailId"></param>
        /// <param name="palletNo"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        public void IssueOutHousePk(string soNo, string detailId, string palletNo, int userId)
        {
            try
            {
                var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0");
                if (notice == null)
                {
                    throw new Exception($"未找到{soNo}出库单信息");
                }
                var detail=Db.Queryable<DataStockDetail>().First(m => m.PalletNo == palletNo && m.IsDel == "0");
                if (detail.WareHouseNo != "W04")
                {
                    throw new Exception("仓库号错误");
                }
                var intDetailId = int.Parse(detailId);
                if (intDetailId <= 0)
                {
                    throw new Exception("选择的出库单明细参数错误");
                }
                //开启事务
                Db.BeginTran();
                notice.Status = "3";//正在进行
                Db.Updateable(notice).ExecuteCommand();
                //所有要出库的出库分配信息(未下发的信息和待拣货的信息)
                var allot = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.PalletNo == palletNo && a.Status == "0").ToList();
                if (allot == null || allot.Count <= 0) //判断是否有需要下发的出库流水
                {
                    throw new Exception("当前出库单据无需要下发的托盘");
                }
                //出库流水(更改状态)
                foreach (var item in allot)
                {
                    item.Status = "2";
                    Db.Updateable(item).ExecuteCommand();
                }
                //添加操作日志记录
                var k = new OperationSOServer().AddLogOperationSo("PDA模块", "下发出库", soNo, "出库", $"点击出库按钮出库单号为:{soNo}的出库单", userId);
                //提交事务
                Db.CommitTran();
            }
            catch (Exception e)
            {
                //回滚事务
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        #region MyRegion
@@ -2012,15 +2098,15 @@
                //Db.Insertable(exTask).ExecuteCommand();
                // 调用Limes接口发起请验
                var sendModel = new SendLimesModel()
                // 调用Sqp接口发起请验
                var sendModel = new SendSapQcDetailVm()
                {
                    QcNo = data.QcNo,
                    SkuNo = data.SkuNo,
                    Qty = data.Qty.ToString(),
                    LotNo = data.LotNo,
                    SupplierLot = data.SupplierLot,
                    RequestUser = userName,                       // 请验人
                    skuNo=data.SkuNo,
                    skuName = data.SkuNo,
                    lotNo = data.LotNo,
                    Qty = Convert.ToDecimal(data.Qty),
                    SupplierLot = data.SupplierLot
                };
                var jsonData = JsonConvert.SerializeObject(sendModel);
                string response = "";
@@ -2028,7 +2114,7 @@
                try
                {
                    var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    //response = HttpHelper.DoPost(url, jsonData, "上传Limes系统发起请验", "Limes");
                    //response = HttpHelper.DoPost(url, jsonData, "上传Sap系统发起请验", "Sap");
                    var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    ////解析返回数据