Administrator
2024-07-02 1c5addd1d2a760d9445934a79e6a6dc987c45401
修改问题
5个文件已修改
374 ■■■■ 已修改文件
Wms/Model/InterFaceModel/RCSModel.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllTransServer/NoticeServer.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllTransServer/RcsServer.cs 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/UpApiController.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/RCSModel.cs
@@ -120,7 +120,7 @@
            public string Location { get; set; }
            public string Type { get; set; }
            public string LotNo { get; set; }
            public string Palletno { get; set; }
            public string PalletNo { get; set; }
            
        }
@@ -154,6 +154,7 @@
            /// 任务类型 
            /// 0:入库
            /// 1:出库
            /// 2:移库
            /// </summary>
            public string Crtype { get; set; }
            /// <summary>
Wms/WMS.BLL/BllTransServer/NoticeServer.cs
@@ -163,6 +163,10 @@
                    resultModel.Success = 0;
                    resultModel.Message = "成功";
                    //提交事务
                    Db.CommitTran();
                    return resultModel;
                }
                switch (taskInfo.OrderType)
@@ -486,19 +490,19 @@
                            sd3.RoadwayNo = endLocatInfo2.RoadwayNo;//所属巷道
                            sd3.AreaNo = endLocatInfo2.AreaNo;//所属区域
                            sd3.LocatNo = endLocatInfo2.LocatNo;//储位地址
                            if (endLocatInfo2.AreaNo == "A01")//洁净区
                            if (endLocatInfo2.AreaNo.Contains("01"))//洁净区
                            {
                                sd3.PalletStatus = "0";
                            }
                            else if (endLocatInfo2.AreaNo == "A02")//预混区
                            else if (endLocatInfo2.AreaNo.Contains("02"))//预混区
                            {
                                sd3.PalletStatus = "1";
                            }
                            else if (endLocatInfo2.AreaNo == "A03")//半成品区
                            else if (endLocatInfo2.AreaNo.Contains("03"))//半成品区
                            {
                                sd3.PalletStatus = "2";
                            }
                            else if (endLocatInfo2.AreaNo == "A04")//脏桶区
                            else if (endLocatInfo2.AreaNo.Contains("04"))//脏桶区
                            {
                                sd3.PalletStatus = "3";
                                sd3.LotNo = "";//批次
@@ -507,7 +511,7 @@
                                sd3.InspectStatus = "0";//待检验
                            }
                        }
                        if (taskInfo.Type == "1")//出库任务
                        else if (taskInfo.Type == "1")//出库任务
                        {
                            //起始储位信息
                            var startLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.StartLocat && w.IsDel == "0");
@@ -525,6 +529,57 @@
                            sd3.AreaNo = "";//所属区域
                            sd3.LocatNo = "";//储位地址
                        }
                        else if (taskInfo.Type == "2")//移库任务
                        {
                            //起始储位信息
                            var startLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.StartLocat && w.IsDel == "0");
                            if (startLocatInfo2 == null)
                            {
                                resultModel.Message = "起始储位信息不存在!";
                                return resultModel;
                            }
                            startLocatInfo2.Status = "0";//空储位
                            //修改起始储位状态
                            Db.Updateable(startLocatInfo2).ExecuteCommand();
                            //目标储位信息
                            var endLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0");
                            if (endLocatInfo2 == null)
                            {
                                resultModel.Message = "目标储位信息不存在!";
                                return resultModel;
                            }
                            endLocatInfo2.Status = "1";//有物品
                            //修改目标储位状态
                            Db.Updateable(endLocatInfo2).ExecuteCommand();
                            sd3.WareHouseNo = endLocatInfo2.WareHouseNo;//所属仓库
                            sd3.RoadwayNo = endLocatInfo2.RoadwayNo;//所属巷道
                            sd3.AreaNo = endLocatInfo2.AreaNo;//所属区域
                            sd3.LocatNo = endLocatInfo2.LocatNo;//储位地址
                            sd3.Status = "0";
                            if (endLocatInfo2.AreaNo.Contains("01"))//洁净区
                            {
                                sd3.PalletStatus = "0";
                                sd3.Status = "0";
                            }
                            else if (endLocatInfo2.AreaNo.Contains("02"))//预混区
                            {
                                sd3.PalletStatus = "1";
                            }
                            else if (endLocatInfo2.AreaNo.Contains("03"))//半成品区
                            {
                                sd3.PalletStatus = "2";
                            }
                            else if (endLocatInfo2.AreaNo.Contains("04"))//脏桶区
                            {
                                sd3.PalletStatus = "3";
                                sd3.LotNo = "";//批次
                                sd3.SkuNo = "";
                                sd3.SkuName = "";
                                sd3.InspectStatus = "0";//待检验
                            }
                        }
                        //修改库存明细
                        Db.Updateable(sd3).ExecuteCommand();
Wms/WMS.BLL/BllTransServer/RcsServer.cs
@@ -1,5 +1,4 @@
using Microsoft.IdentityModel.Protocols;
using Newtonsoft.Json;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
@@ -30,7 +29,6 @@
        public void GetPalletNo(Pallnetmsg pallnetmsg)
        {
            DataStockDetail pallet = new DataStockDetail();
            SysStorageLocat locat = new SysStorageLocat();
            try
            {
                var house = "W01";//叫桶位置,后续根据位置关联或定义,来判断叫桶位置所属车间
@@ -40,66 +38,13 @@
                switch (pallnetmsg.Type)
                {
                    case "0"://叫净桶
                        List<DataStockDetail> jtpallet = new List<DataStockDetail>();
                        sql += $"and  WareHouseNo = '{house}' and AreaNo like '%01' order by CreateTime desc";
                        jtpallet = Db.Ado.SqlQuery<DataStockDetail>(sql).ToList();
                        if (jtpallet.Count == 0)
                        sql += $"and WareHouseNo = '{house}' and AreaNo like '%01' and PalletStatus = '0' order by CreateTime desc";
                        pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault();
                        if (pallet == null)
                        {
                            throw new Exception("暂无净桶可分配");
                        }
                        //遍历库存净桶,返回MES验证
                        foreach (var item in jtpallet)
                        {
                            string jsonReq = JsonConvert.SerializeObject(item.PalletNo);
                            var response = HttpHelper.DoPost(url, jsonReq, "回传MES净桶编号", "RCS").ToString();
                            var obj = JsonConvert.DeserializeObject<ReMes>(response);//解析返回数据
                            if (obj.Success == "0")
                            {
                                if (obj.Result != "0")//可用,生成小车拉净桶任务
                                {
                                    //查找是否有空余脏桶位
                                    sql = $"select LocatNo from SysStorageLocat where AreaNo like '%04' and WareHouseNo = '{house}' and Status = 0";
                                    locat = Db.Ado.SqlQuery<SysStorageLocat>(sql).FirstOrDefault();
                                    if (locat == null)
                                    {
                                        Db.Ado.BeginTran();
                                        //脏桶区无空余库位,则锁定此净桶库存,并重新遍历
                                        sql = $"UPDATE DataStockDetail Set Status = '5' Where locat ='{locat.LocatNo}'";
                                        Db.Ado.ExecuteCommand(sql);
                                        Db.Ado.CommitTran();
                                        break;
                                    }
                                    //生成调度小车净桶去脏桶区任务
                                    var ztask = new TaskDetial
                                    {
                                        Startport = item.LocatNo,
                                        Endport = locat.LocatNo,
                                        Pallno = item.PalletNo,
                                        Type = "3",
                                        Crtype = "0",
                                        Noticedetailno = int.Parse(noticeno),
                                    };
                                    CreateLotTask(ztask);
                                    continue;
                                }
                                //下发小车任务
                                var task2 = new TaskDetial
                                {
                                    Startport = item.LocatNo,
                                    Endport = pallnetmsg.Location,
                                    Pallno = item.PalletNo,
                                    Type = pallnetmsg.Type,
                                    Crtype = "1",
                                    Noticedetailno = int.Parse(noticeno),
                                };
                                CreateLotTask(task2);
                                return;
                            }
                            else
                            {
                                throw new Exception("回传MES净桶编号失败!");
                            }
                        }
                        break;
                    case "1"://叫料桶(混料)
                        //判断是否有批次号
@@ -117,8 +62,8 @@
                        }
                        noticeno = ArriveMes.Id.ToString();*/
                        //查找库存中是否有可用的此批次的混料桶
                        sql= $"select PalletNo,LocatNo from DataStockDetail where LotNo =  '{pallnetmsg.LotNo}'and AreaNo like '%02' " +
                            $"and WareHouseNo = '{house}' and status = '0' order by CompleteTime desc";
                        sql= $@"select PalletNo,LocatNo from DataStockDetail where LotNo =  '{pallnetmsg.LotNo}'and AreaNo like '%02'
                                   and WareHouseNo = '{house}' and status = '0' and PalletStatus = '1' order by CompleteTime desc";
                        pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault();
                        if (pallet == null)
                        {
@@ -142,8 +87,8 @@
                        }
                        noticeno = bllSo.Id.ToString();
                        //查找库存中是否有此批次的下料桶
                        sql = $"select PalletNo,LocatNo from DataStockDetail where LotNo =  '{pallnetmsg.LotNo}'and AreaNo like '%03' " +
                            $"and WareHouseNo = '{house}' and status = '0' order by CompleteTime desc";
                        sql = $@"select PalletNo,LocatNo from DataStockDetail where LotNo = '{pallnetmsg.LotNo}'and AreaNo like '%03'
                                    and WareHouseNo = '{house}' and status = '0' and PalletStatus = '2' order by CompleteTime desc";
                        pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault();
                        if (pallet == null)
                        {
@@ -152,13 +97,46 @@
                        break;
                    case "3"://叫脏桶
                        sql += $"and WareHouseNo = '{house}' and AreaNo like '%04' order by CreateTime desc";
                        pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault();
                        if (pallet == null)
                        sql += $"and WareHouseNo = '{house}' and AreaNo like '%04' and PalletStatus='3' order by CreateTime desc";
                        List<DataStockDetail> palletList = Db.Ado.SqlQuery<DataStockDetail>(sql).ToList();
                        if (palletList.Count <= 0)
                        {
                            throw new Exception("暂无脏桶可分配");
                        }
                        //遍历库存脏桶,返回MES验证
                        foreach (var item in palletList)
                        {
                            string jsonReq = JsonConvert.SerializeObject(item.PalletNo);
                            var response = HttpHelper.DoPost(url, jsonReq, "回传MES脏桶编号", "RCS").ToString();
                            var obj = JsonConvert.DeserializeObject<ReMes>(response);//解析返回数据
                            if (obj.Success == "0")
                            {
                                if (obj.Result != "1")//不可清洗,将脏桶冻结
                                {
                                    item.Status = "5";//异常冻结
                                    //修改该桶库存状态
                                    Db.Updateable(item).ExecuteCommand();
                                    continue;
                                }
                                //下发小车任务
                                var task2 = new TaskDetial
                                {
                                    Startport = item.LocatNo,
                                    Endport = pallnetmsg.Location,
                                    Pallno = item.PalletNo,
                                    Type = pallnetmsg.Type,
                                    Crtype = "1",
                                    Noticedetailno = int.Parse(noticeno),
                                };
                                CreateLotTask(task2);
                                return;
                            }
                            else
                            {
                                throw new Exception("回传MES净桶编号失败!");
                            }
                        }
                        break;
                }
                //下发小车任务
@@ -178,6 +156,102 @@
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                throw ex;
            }
        }
        /// <summary>
        /// MES下发将净桶改为脏桶并拉到脏桶区
        /// </summary>
        /// <param name="PalletNo"></param>
        /// <returns></returns>
        public void ChangePalletStatus(string PalletNo)
        {
            try
            {
                var detail = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == PalletNo && w.PalletStatus == "0");
                if (detail == null)
                {
                    throw new Exception($"库存中不存在桶号为:{PalletNo}的库存!");
                }
                //起始目标储位信息
                var statrtLocat = Db.Queryable<SysStorageLocat>().First(w => w.WareHouseNo == detail.WareHouseNo && w.AreaNo == detail.AreaNo && w.LocatNo == detail.LocatNo);
                if (statrtLocat == null)
                {
                    throw new Exception($"该桶所在的储位信息不存在!");
                }
                //开启事务
                Db.BeginTran();
                //查找是否有空余脏桶位
                var endLocat = Db.Queryable<SysStorageLocat>().First(w => w.WareHouseNo == detail.WareHouseNo && w.AreaNo.Contains("04") && w.Status == "0" && w.Flag=="0");
                if (endLocat == null)
                {
                    detail.Status = "5";//异常锁定
                    detail.PalletStatus = "3";//脏桶
                    //修改库存状态
                    Db.Updateable(detail).ExecuteCommand();
                }
                else
                {
                    //生成调度小车净桶去脏桶区任务
                    var ztask = new TaskDetial
                    {
                        Startport = detail.LocatNo,
                        Endport = endLocat.LocatNo,
                        Pallno = PalletNo,
                        Type = "3",
                        Crtype = "2",
                        Noticedetailno = 0,
                    };
                    CreateLotTask(ztask);
                    statrtLocat.Status = "3";//出库中
                    //修改起始储位状态
                    Db.Updateable(statrtLocat).ExecuteCommand();
                    detail.Status = "5";//异常锁定
                    detail.PalletStatus = "3";//脏桶
                    //修改库存状态
                    Db.Updateable(detail).ExecuteCommand();
                }
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw ex;
            }
        }
        /// <summary>
        /// MES下发清洗锁定脏桶
        /// </summary>
        /// <param name="pallnetmsg"></param>
        public void CleanPallet(Pallnetmsg pallnetmsg)
        {
            try
            {
                var detail = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == pallnetmsg.PalletNo && w.PalletStatus == "3");
                if (detail == null)
                {
                    throw new Exception($"库存中不存在桶号为:{pallnetmsg.PalletNo}的库存!");
                }
                //下发小车任务
                var task = new TaskDetial
                {
                    Startport = detail.LocatNo,
                    Endport = pallnetmsg.Location,
                    Pallno = detail.PalletNo,
                    Type = "3",
                    Crtype = "1",
                    Noticedetailno = 0,
                    LotNo = "",
                };
                CreateLotTask(task);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
@@ -262,7 +336,7 @@
                {
                    Startport = pallnetmsg.Location,
                    Endport = loction.LocatNo,
                    Pallno = pallnetmsg.Palletno,
                    Pallno = pallnetmsg.PalletNo,
                    Type = pallnetmsg.Type,
                    Crtype = "0",
                    Noticedetailno = int.Parse(noticeno),
@@ -371,7 +445,19 @@
            {
                //开启事务
                Db.BeginTran();
                var na = taskDetial.Crtype == "0"?"入库":"出库";
                var na = "";
                switch (taskDetial.Crtype)
                {
                    case "0":
                        na = "入库";
                        break;
                    case "1":
                        na = "出库";
                        break;
                    case "2":
                        na = "移库";
                        break;
                }
                var bz = "";
                switch (taskDetial.Type)
                {
@@ -459,7 +545,7 @@
                logTaskEntry.IsSuccess = 1;
                logTaskEntry.BackDate = DateTime.Now;
                logTaskEntry.Status = "1";
                if (taskDetial.Crtype == "0")
                if (taskDetial.Crtype == "0" || taskDetial.Crtype == "2")
                {
                    sql = $"UPDATE SysStorageLocat SET Status = '2' where LocatNo = '{taskDetial.Endport}'";
                    if (taskDetial.Type == "2")
@@ -483,7 +569,6 @@
                Db.RollbackTran();
                throw ex;
            }
        }
    }
}
Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs
@@ -1,4 +1,5 @@
using System;
using Model.InterFaceModel;
using System;
using System.Collections.Generic;
using System.Text;
using static Model.InterFaceModel.RCSModel;
@@ -15,7 +16,19 @@
        /// <returns></returns>
        public void GetPalletNo(Pallnetmsg pallnetmsg);
        /// <summary>
        /// 将净桶改为脏桶并拉到脏桶区
        /// </summary>
        /// <param name="PalletNo"></param>
        /// <returns></returns>
        public void ChangePalletStatus(string PalletNo);
        /// <summary>
        /// MES下发清洗锁定脏桶
        /// </summary>
        /// <param name="pallnetmsg"></param>
        public void CleanPallet(Pallnetmsg pallnetmsg);
        /// <summary>
        /// 申请储位
        /// </summary>
Wms/Wms/Controllers/UpApiController.cs
@@ -437,6 +437,66 @@
                return Ok(result);
            }
        }
        /// <summary>
        /// 将净桶改为脏桶并拉到脏桶区
        /// </summary>
        /// <param name="pallmsg"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult ChangePalletStatus(Pallnetmsg pallmsg)
        {
            var result = new ErpModel { Success = -1, Message = "", };
            try
            {
                if (string.IsNullOrWhiteSpace(pallmsg.PalletNo))
                {
                    result.Message = "桶编号不能为空!";
                    return Ok(result);
                }
                _rcsserver.ChangePalletStatus(pallmsg.PalletNo);
                result.Success = 0;
                result.Message = "操作成功!";
                return Ok(result);
            }
            catch (Exception e)
            {
                result.Message = e.Message;
                return Ok(result);
            }
        }
        /// <summary>
        /// MES下发清洗锁定脏桶
        /// </summary>
        /// <param name="pallmsg"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult CleanPallet(Pallnetmsg pallmsg)
        {
            var result = new ErpModel { Success = -1, Message = "", };
            try
            {
                if (string.IsNullOrWhiteSpace(pallmsg.Location))
                {
                    result.Message = "叫料位置为空!";
                    return Ok(result);
                }
                if (string.IsNullOrWhiteSpace(pallmsg.PalletNo))
                {
                    result.Message = "桶号为空!";
                    return Ok(result);
                }
                _rcsserver.CleanPallet(pallmsg);
                result.Success = 0;
                result.Message = "叫桶成功!";
                return Ok(result);
            }
            catch (Exception e)
            {
                result.Message = e.Message;
                return Ok(result);
            }
        }
        /// <summary>
        /// RCS申请储位
@@ -459,7 +519,7 @@
                    result.Message = "任务类型为空!";
                    return Ok(result);
                }
                if (string.IsNullOrWhiteSpace(pallmsg.Palletno))
                if (string.IsNullOrWhiteSpace(pallmsg.PalletNo))
                {
                    result.Message = "申请托盘号为空!";
                    return Ok(result);