chengsc
2025-05-13 6167bf4c8fe617d9f9861585042149d48ad15dbb
Wms/WMS.BLL/HttpServer.cs
@@ -1,4 +1,6 @@
using Model.InterFaceModel;
using Model.ModelVm;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
@@ -8,6 +10,7 @@
using WMS.BLL.LogServer;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.BllQualityEntity;
using WMS.Entity.BllSoEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
@@ -80,7 +83,7 @@
                    }
                }
                var upShelfOldList = Db.Queryable<BllPalletUpShelf>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1")).ToList();
                if (upShelfOldList != null) //查询到入库信息
                if (upShelfOldList.Count != 0) //查询到入库信息
                {
                    var upShelfOld = upShelfOldList.First();
                    var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == upShelfOld.TaskNo);
@@ -287,8 +290,8 @@
                    // 添加托盘绑定表托盘入库任务号 liudl
                    foreach (DataStockDetail stockModel in stockDetail)
                    {
                        var bindModel = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Status == "2"
                        && m.PalletNo == stockModel.PalletNo && m.ASNNo == stockModel.ASNNo && m.ASNDetailNo == stockModel.ASNDetailNo);
                        var bindModel = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.Status == "2"
                        && m.PalletNo == stockModel.PalletNo && m.ASNNo == stockModel.ASNNo && m.ASNDetailNo == stockModel.ASNDetailNo).OrderByDescending(m=>m.CreateTime).First();
                        if (bindModel != null && string.IsNullOrWhiteSpace(bindModel.TaskNo))
                        {
                            bindModel.TaskNo = taskNo;
@@ -416,6 +419,10 @@
                foreach (var item in stockDetail)
                {
                    var skuItem = skuList.First(m => m.SkuNo == item.SkuNo);
                    if (skuItem.SkuNo == "100099")
                    {
                        continue;
                    }
                    if (skuItem.Type != "2")
                    {
                        throw new Exception("托盘上有不是成品的物料");
@@ -528,7 +535,7 @@
                }
                //巷道组信息
                var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo))
                var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) && !string.IsNullOrWhiteSpace(m.RoadwayNo))
                    .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
                #endregion
@@ -586,8 +593,8 @@
                    
                    foreach (DataStockDetail stockModel in stockDetail)
                    {
                        var bindModel = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Status == "2"
                        && m.PalletNo == stockModel.PalletNo && m.ASNNo == stockModel.ASNNo && m.ASNDetailNo == stockModel.ASNDetailNo);
                        var bindModel = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.Status == "2"
                        && m.PalletNo == stockModel.PalletNo && m.ASNNo == stockModel.ASNNo && m.ASNDetailNo == stockModel.ASNDetailNo).OrderByDescending(m=>m.CreateTime).First();
                        if (bindModel != null && string.IsNullOrWhiteSpace(bindModel.TaskNo))
                        {
                            bindModel.TaskNo = taskNo;
@@ -719,6 +726,10 @@
                foreach (var item in stockDetail)
                {
                    var skuItem = skuList.First(m => m.SkuNo == item.SkuNo);
                    if (skuItem.SkuNo == "100099")
                    {
                        continue;
                    }
                    if (skuItem.Type != "2")
                    {
                        throw new Exception("托盘上有不是成品的物料");
@@ -839,7 +850,10 @@
                }
                locate = allotLocate.GetMiJiSuiTableLocate(roadwayNo, areaList);
                if (locate == null)
                {
                    throw new Exception($"没有空储位");
                }
                #endregion
@@ -1021,12 +1035,21 @@
                {
                    throw new Exception($"未查询到任务中的储位信息");
                }
                var pingAreaStr = Db.Queryable<SysStorageArea>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W04" && m.AreaNo != "B06" && m.AreaNo != "B07").Select(m => m.AreaNo).ToList();
                var pingAreaStr = Db.Queryable<SysStorageArea>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W04").Select(m => m.AreaNo).ToList();
                var pingLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locate.LocatNo && pingAreaStr.Contains(m.AreaNo) && m.IsDel == "0");
                if (pingLocateInfo == null)
                {
                    throw new Exception("当前任务起始储位不在平库储位");
                }
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == task.PalletNo).ToList();
                foreach (var item in stockDetail)
                {
                    item.WareHouseNo = "";
                    item.RoadwayNo = "";
                    item.AreaNo = "";
                    item.LocatNo = "";
                }
                Db.Updateable(stockDetail).ExecuteCommand();
                locate.Status = "0";
                Db.Updateable(locate).ExecuteCommand();
            }
@@ -1118,6 +1141,217 @@
        }
        /// <summary>
        /// 移库任务完成JC34
        /// </summary>
        /// <param name="taskNo"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        public void MoveSuccess(string taskNo, int userId)
        {
            try
            {
                Db.BeginTran();
                //正常入库
                var task = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == taskNo);
                if (task == null)
                {
                    throw new Exception("未查询到任务信息");
                }
                if (task.Status == "2")
                {
                    throw new Exception("当前任务已完成");
                }
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
                //判断是否是回流入库完成
                if (!stockDetail.Any())
                {
                    throw new Exception("没有查询到库存信息");
                }
                //当前任务中的储位信息
                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat);
                if (locate == null)
                {
                    throw new Exception($"未查询到任务中的起始储位信息");
                }
                //当前任务中的储位信息
                var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
                if (locate2 == null)
                {
                    throw new Exception($"未查询到任务中的目标储位信息");
                }
                task.Status = "2";//任务状态
                task.IsSend = 0;
                task.IsCancel = 0;
                task.IsFinish = 0;
                task.FinishDate = DateTime.Now;//完成时间
                Db.Updateable(task).ExecuteCommand();
                if (userId != 0)
                {
                    //添加操作日志记录
                    var k = new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                }
                foreach (var item in stockDetail)
                {
                    if (locate2.LocatNo == "B040101")
                    {
                        item.WareHouseNo = "";
                        item.RoadwayNo = "";
                        item.AreaNo = "";
                        item.LocatNo = "";
                    }
                    else
                    {
                        item.WareHouseNo = locate2.WareHouseNo;
                        item.RoadwayNo = locate2.RoadwayNo;
                        item.AreaNo = locate2.AreaNo;
                        item.LocatNo = locate2.LocatNo;
                    }
                    item.UpdateTime = DateTime.Now;
                    if (userId != 0)
                    {
                        item.UpdateUser = userId;
                    }
                }
                if (locate.WareHouseNo != "W04")
                {
                    locate.Status = "0";
                    Db.Updateable(locate).ExecuteCommand();
                }
                if (locate2.LocatNo == "B040101")
                {
                    locate2.Status = "0";
                    Db.Updateable(locate2).ExecuteCommand();
                }
                else
                {
                    locate2.Status = "1";
                    Db.Updateable(locate).ExecuteCommand();
                }
                Db.Updateable(stockDetail).ExecuteCommand();
                Db.CommitTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        #region MyRegion
        /// <summary>
        /// 向Limes发送请验信息
        /// </summary>
        /// <param name="model">model.Id:请验单主键;model.Code:出库口 </param>
        /// <param name="userId">操作用户</param>
        /// <param name="url">Wcs地址</param>
        /// <returns></returns>
        public bool SendInspectionRequest(IdVm model, int userId, string url, string userName)
        {
            try
            {
                // 判断请验单状态
                var data = Db.Queryable<BllQualityInspectionRequest>()
                    .Where(m => m.QcNo == model.Code && m.IsDel == "0" && m.Status == "0").ToList().FirstOrDefault();
                if (data == null)
                {
                    throw new Exception("操作失败!请验单状态变更.");
                }
                // 记录任务日志
                //var taskNo = new Common().GetMaxNo("TK");
                //var exTask = new LogTask()
                //{
                //     TaskNo = taskNo,
                //     Sender = "WMS",
                //     Receiver = "Limes",
                //     IsSuccess = 0,                  //是否下发成功 0失败 1成功
                //     StartLocat = "",               //起始位置
                //     PalletNo = "",                 //托盘码
                //     IsSend = 1,                    //是否可再次下发
                //     IsCancel = 1,                  //是否可取消
                //     IsFinish = 1,                  //是否可完成
                //     Status = "0",                  //任务状态0:等待执行1正在执行2执行完成
                //     OrderType = "5",               //0 入库单 1 出库单  2 盘点单  3 移库单 4 取样出库单 5 其他
                //     EndLocat = "",          //目标位置
                //     Type = "3",                     //任务类型 0 入库任务 1 出库任务  2 移库任务
                //     Msg = "请验任务"
                //};
                //// 插入任务日志
                //Db.Insertable(exTask).ExecuteCommand();
                // 调用Limes接口发起请验
                var sendModel = new SendLimesModel()
                {
                    QcNo = data.QcNo,
                    SkuNo = data.SkuNo,
                    Qty = data.Qty.ToString(),
                    LotNo = data.LotNo,
                    SupplierLot = data.SupplierLot,
                    RequestUser = userName,                       // 请验人
                };
                var jsonData = JsonConvert.SerializeObject(sendModel);
                string response = "";
                try
                {
                    var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    //response = HttpHelper.DoPost(url, jsonData, "上传Limes系统发起请验", "Limes");
                    var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    ////解析返回数据
                    //var limesModel = JsonConvert.DeserializeObject<LimesModel>(response);
                    //if (limesModel.Success == 0)
                    //{
                    // 更新请验单信息
                    data.Status = "1";
                    data.SamplingQty = 10;//decimal.Parse(limesModel.SamplingQty);
                    data.RequestUser = userId;
                    data.RequestTime = DateTime.Now;
                    data.UpdateTime = DateTime.Now;
                    data.UpdateUser = userId;
                    Db.Updateable(data).ExecuteCommand();
                    //}
                    //if (limesModel.Success == -1)
                    //{
                    //    throw new Exception(limesModel.Message);
                    //}
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                //添加操作日志记录
                var k = new OperationCrServer()
                    .AddLogOperationCr("质量管理", "质检请验", model.Code, "请验", $"向质量部分发起请验!", userId);
                return true;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        #endregion
    }