7d331e13fef4abcec306745dbe9721bafbaf1821..8bc688f992f70815084e958a728a696871294672
2025-07-01 pulg
Merge branch 'master' of http://121.37.118.194:8000/r/WMSPrjInstance/HH-001...
8bc688 对比 | 目录
2025-07-01 pulg
1
cb08ae 对比 | 目录
2025-07-01 czw
1
b868d2 对比 | 目录
2025-07-01 czw
1
9b5404 对比 | 目录
2025-07-01 czw
Revert "1"
0c8543 对比 | 目录
2025-07-01 czw
1
e2fe85 对比 | 目录
2025-07-01 czw
1
d4fd25 对比 | 目录
2025-07-01 pulg
1
9db9cd 对比 | 目录
8个文件已修改
195 ■■■■ 已修改文件
HH.WCS.QingXiNongfu/Program.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/core/Monitor.cs 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/core/TaskCore.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/dispatch/NDC.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/process/TaskProcess.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/wms/LocationHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/wms/TaskHelper.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/wms/WMSModel.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/Program.cs
@@ -19,6 +19,7 @@
using System.Threading;
using System.Threading.Tasks;
using Topshelf;
using static System.Net.Mime.MediaTypeNames;
using Monitor = HH.WCS.QingXigongchang.core.Monitor;
namespace HH.WCS.QingXigongchang
@@ -77,8 +78,6 @@
                //Console.WriteLine(set1.SetEquals(set3));
                #endregion
                var uuu16 = "TN" + (DateTime.Now.ToString("yy")) + ((6180010 + "").PadLeft(8, '0'));
                Console.WriteLine(uuu16);
            }
            else
            {
HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -430,13 +430,17 @@
                var orders = WCSHelper.GetWorkOrder2();
                var thisOrder = orders.Find(x => x.SQL_WorkNo == WorkNo);
                LogHelper.Info("移库解锁 --当前工单 sid:" + thisOrder?.S_ID);
                if (thisOrder != null)
                {
                    var other = orders.Find(x => x.SQL_WorkNo != WorkNo && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row);
                    LogHelper.Info($"移库解锁 --其他工单 x.start_area == {thisOrder.start_area} start_row == {thisOrder.start_row} SID:" + other?.S_ID);
                    if (other != null)
                        j解锁起点库区排 = false;
                }
                var allarea_rows = orders.FindAll(x => x.S_ID != thisOrder.S_ID && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row);
                LogHelper.Info("移库解锁 --当前工单 的同库区排 其他工单:" + JsonConvert.SerializeObject(allarea_rows));
                if (allarea_rows.Any())
                    j解锁起点库区排 = false;
                //if (thisOrder != null)
                //{
                //    var other = orders.Find(x => x.SQL_WorkNo != WorkNo && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row);
                //    LogHelper.Info($"移库解锁 --其他工单 x.start_area == {thisOrder.start_area} start_row == {thisOrder.start_row} SID:" + other?.S_ID);
                //    if (other != null)
                //        j解锁起点库区排 = false;
                //}
            }
            //if (sign == 1)
            //{
@@ -1135,6 +1139,17 @@
                                                continue;
                                            }
                                        }
                                        if (CDlist.Contains(EdnRarea))
                                        {
                                            var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_STATE == "入库锁");
                                            //var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "入库锁"));
                                            if (ls.Count() > 2)
                                            {
                                                LogHelper.Info($"{EdnRarea}任务数1管制3");
                                                continue;
                                            }
                                        }
                                        //else if (CDlist.Contains(EdnRarea))
                                        //{
                                        //    var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "入库锁")).ToList();
@@ -1230,12 +1245,19 @@
                                                        ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && t.S_ITEM_CODE == cir1.S_ITEM_CODE && t.S_ITEM_NAME == cir1.S_ITEM_NAME && t.S_CJ_NAME == cir1.S_CJ_NAME && o.S_AREA_CODE == EdnRarea);
                                                        var lstCanOutL = dbll.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca.ToExpression()).ToList();
                                                        LogHelper.Info($"终点有相同的物料的货位有{lstCanOutL.Count()}");
                                                        var ca1 = Expressionable.Create<Location, LocCntrRel, CntrItemRel>();
                                                        ca1.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && t.S_ITEM_CODE == cir1.S_ITEM_CODE && t.S_ITEM_NAME == cir1.S_ITEM_NAME && t.S_CJ_NAME == cir1.S_CJ_NAME && o.S_AREA_CODE == "YWLRGDD" && p.S_TYPE == EdnRarea);
                                                        var lstCanOutLSta = dbll.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca1.ToExpression()).ToList();
                                                        if (lstCanOutL.Count() > 0)
                                                        {
                                                            var EndMum = dbll.Queryable<Location>().Where(l => l.S_AREA_CODE == EdnRarea && l.N_CURRENT_NUM == 0 && l.S_LOCK_STATE == "无" && lstCanOutL.Select(e => e.N_ROW).ToList().Contains(l.N_ROW)).ToList();
                                                            if (EndMum.Count() > 0)
                                                            {
                                                                arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList();
                                                                if (lstCanOutL.Count() <= EndMum.Count())
                                                                {
                                                                    arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList();
                                                                }
                                                            }
                                                        }
                                                    }
@@ -1487,7 +1509,6 @@
                    if (tklist.Count() > 0)
                    {
                        var tk = tklist.FirstOrDefault();
                        var loc = LocationHelper.GetLoc(plc.location[0]);
                        if (loc.N_CURRENT_NUM > 0 && loc.S_LOCK_STATE == "无")
                        {
HH.WCS.QingXiNongfu/core/TaskCore.cs
@@ -389,6 +389,9 @@
                var info = db.Queryable<KuRong>().First();
                if (info == null || DateTime.Now.Subtract(info.T_MODIFY).TotalMinutes > min)
                {
                    db.Deleteable<KuRong>().ExecuteCommand();
                    info = null;
                    //1、查到小板库区下面所有的库位
                    var totalX = 0;
                    var totalRows = 0;
@@ -486,9 +489,21 @@
                    }
                    var totalDesiredCapacity = ordersCount * 4 * 3 * (totalX / totalRows);
                    LogHelper.Error($"成品小板区总货位是{totalX},总排数是{totalRows},当前执行工单数量是{ordersCount}", new Exception("Kurong"));
                    var totalAvailableCapacity = list.Sum(a => a.AvailableCapacity);
                    var totalAssignableCapacity = totalAvailableCapacity - totalDesiredCapacity;
                    list.ForEach(a => { a.DesiredCapacity = totalDesiredCapacity; a.CRC = totalAvailableCapacity; a.RAC = totalAssignableCapacity; });
                    //var totalAvailableCapacity = list.Sum(a => a.AvailableCapacity);
                    //var totalAssignableCapacity = totalAvailableCapacity - totalDesiredCapacity;
                    //list.ForEach(a => { a.DesiredCapacity = totalDesiredCapacity; a.CRC = totalAvailableCapacity; a.RAC = totalAssignableCapacity; });
                    var totalAvailableCapacity = list.Sum(a => a.MaxCapacity);// AvailableCapacity);
                    var DRC = list.Sum(x => x.FilledCapacity);
                    var totalAssignableCapacity = totalAvailableCapacity - DRC - totalDesiredCapacity;
                    var BAC = list.Sum(x => x.AvailableCapacity);
                    list.ForEach(a =>
                    {
                        a.DesiredCapacity = totalDesiredCapacity;
                        a.CRC = totalAvailableCapacity;
                        a.RAC = totalAssignableCapacity;
                        a.BAC = BAC;
                        a.DRC = DRC;
                    });
                    if (info == null)
                    {
                        /*​SQL Server​    1000 条/批次    单个 INSERT 语句最多支持 1000 条 VALUES 子句,超出会报语法错误。*/
HH.WCS.QingXiNongfu/dispatch/NDC.cs
@@ -82,6 +82,28 @@
                return false;
            }
        }
        /// <summary>
        /// 修改优先级
        /// </summary>
        /// <param name="taskNo">任务号</param>
        /// <param name="paramNo">优先级</param>
        /// <returns></returns>
        public static bool ChangeParamPri(string taskNo, int paramNo = 0)
        {
            bool bResult = false;
            var dic = new Dictionary<string, string>();
            dic.Add("No", taskNo);
            if (paramNo >= 0)
            {
                dic.Add("Pri", paramNo.ToString());
            }
            dic.Add("IKey", "");
            var result = ChangeOrder(dic);
            if (result.Res.ErrCode == 0) { bResult = true; }
            return bResult;
        }
        public static AGVResult AddNewOrderNew(int ts, int pri, string taskNo, Dictionary<string, string> param)
        {
            //< Req >< Order TS = '1' Pri = '1' No = 'TN2302020001' Ext1 = '' Ext2 = '' N_CNTR_COUNT = '' >< Param Name = 'From' Value = '2' />< Param Name = 'To' Value = '1' /></ Order ></ Req >
HH.WCS.QingXiNongfu/process/TaskProcess.cs
@@ -1114,9 +1114,9 @@
            }
            if (state == 9)
            {
                CacheBitUpdate(mst, load: true);
                var g = LocationHelper.UnLockLoc(mst.S_END_LOC.Trim());
                var T = LocationHelper.UnLockLoc(mst.S_START_LOC.Trim());
                CacheBitUpdate(mst, load: true);
            }
            return r;
        }
HH.WCS.QingXiNongfu/wms/LocationHelper.cs
@@ -790,7 +790,7 @@
                        LogHelper.Info($"{plc.deviceName}-{workOrder.SQL_WorkNo}链接的产线号{LineTo} BolArea 未配置。");
                        goto ______label____end;
                    }
                    bitslocs = LocationHelper.GetAreaNormalLocList(ba.UsingBolArea, true, false);
                    bitslocs = LocationHelper.GetAreaNormalLocList(ba.UsingBolArea);
                    //var bits = Settings.GetInStockCacheList().Where(a => a.deviceName == _t)?.Select(x => x.location);
                    //bitslocs = LocationHelper.GetAllLocList().Where(x => bits.Contains(x.S_LOC_CODE.Trim())).ToList();
HH.WCS.QingXiNongfu/wms/TaskHelper.cs
@@ -1,4 +1,4 @@
using HH.WCS.QingXigongchang.process;
using HH.WCS.QingXigongchang.dispatch;
using HH.WCS.QingXigongchang.util;
using Newtonsoft.Json;
using SqlSugar;
@@ -239,43 +239,55 @@
        }
        internal static void End(WMSTask task)
        {
            var db = new SqlHelper<WMSTask>().GetInstance();
            var db = new SqlHelper<object>().GetInstance();
            //plg 2025年6月13日 10:42:24
            if (task.S_END_LAREA == "YWLWJJB" && task.S_START_LAREA != "YWLRGDD" && !string.IsNullOrEmpty(task.S_TWO_END_LOC))
            if (task.S_END_LAREA == "YWLYLTKQ" || task.S_END_LAREA == "YWLTKKTQ")
            {
                var model = db.Queryable<Location>().Where(a => a.S_LOC_CODE == task.S_TWO_END_LOC).First();
                if (model != null)
                //查询出库锁YWLWJJB
                var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == "YWLWJJB" && x.S_LOCK_STATE == "出库锁");
                if (ls.Any())
                {
                    //先解锁终点 在锁定
                    db.Ado.BeginTran();
                    try
                    var tas = db.Queryable<WMSTask>().Where(a => a.S_START_LOC == ls.First().S_LOC_CODE).ToList().FirstOrDefault();
                    if (tas.S_B_STATE == "已推送")
                    {
                        model.S_LOCK_STATE = "无";
                        var res = db.Updateable(model).UpdateColumns(it => new { it.S_LOCK_STATE }).ExecuteCommand() > 0;
                        LogHelper.Info(task.S_TWO_END_LOC + "LockLoc:锁结果" + res);
                        db.Ado.CommitTran();
                        NDC.ChangeParamPri(tas.S_TASK_NO, 70);
                    }
                    catch (Exception ex)
                    {
                        db.Ado.RollbackTran();
                        LogHelper.Info("CreateTask 失败 " + ex.Message);
                    }
                    LogHelper.Info(task.S_TWO_END_LOC + "二段任务 开始。 ");
                    var b = TaskProcess.CreateTransport(task.S_SRC_NO, task.S_END_LOC, task.S_TWO_END_LOC, "原物料搬运-纸箱", task.S_CNTRS.Split(',').ToList(), task.N_START_LAYER, 1, task.N_CNTR_COUNT, task.N_PRIORITY);
                    //if (b)
                    //{
                    //    if (task != null)
                    //    {
                    //        task.S_B_STATE = "完成";
                    //        task.T_END_TIME = DateTime.Now;
                    //        db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE, it.T_END_TIME }).ExecuteCommand();
                    //    }
                    //}
                }
            }
            ////plg 2025年6月13日 10:42:24
            //if (task.S_END_LAREA == "YWLWJJB" && task.S_START_LAREA != "YWLRGDD" && !string.IsNullOrEmpty(task.S_TWO_END_LOC))
            //{
            //    var model = db.Queryable<Location>().Where(a => a.S_LOC_CODE == task.S_TWO_END_LOC).First();
            //    if (model != null)
            //    {
            //        //先解锁终点 在锁定
            //        db.Ado.BeginTran();
            //        try
            //        {
            //            model.S_LOCK_STATE = "无";
            //            var res = db.Updateable(model).UpdateColumns(it => new { it.S_LOCK_STATE }).ExecuteCommand() > 0;
            //            LogHelper.Info(task.S_TWO_END_LOC + "LockLoc:锁结果" + res);
            //            db.Ado.CommitTran();
            //        }
            //        catch (Exception ex)
            //        {
            //            db.Ado.RollbackTran();
            //            LogHelper.Info("CreateTask 失败 " + ex.Message);
            //        }
            //        LogHelper.Info(task.S_TWO_END_LOC + "二段任务 开始。 ");
            //        var b = TaskProcess.CreateTransport(task.S_SRC_NO, task.S_END_LOC, task.S_TWO_END_LOC, "原物料搬运-纸箱", task.S_CNTRS.Split(',').ToList(), task.N_START_LAYER, 1, task.N_CNTR_COUNT, task.N_PRIORITY);
            //        //if (b)
            //        //{
            //        //    if (task != null)
            //        //    {
            //        //        task.S_B_STATE = "完成";
            //        //        task.T_END_TIME = DateTime.Now;
            //        //        db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE, it.T_END_TIME }).ExecuteCommand();
            //        //    }
            //        //}
            //    }
            //}
            if (task != null)
            {
                task.S_B_STATE = "完成";
HH.WCS.QingXiNongfu/wms/WMSModel.cs
@@ -376,14 +376,46 @@
    [SuGG("库容表")]
    public class KuRong : BaseModel
    {
        /// <summary>
        /// 库位
        /// </summary>
        public string StorageLoc { get; set; }
        /// <summary>
        /// AGV总库容
        /// </summary>
        public int MaxCapacity { get; set; }
        /// <summary>
        /// 已占库容
        /// </summary>
        public int FilledCapacity { get; set; }
        /// <summary>
        /// 品相
        /// </summary>
        public string ProductItem { get; set; }
        /// <summary>
        /// 剩余库容量
        /// </summary>
        public int AvailableCapacity { get; set; }
        /// <summary>
        /// agv所需库容。
        /// </summary>
        public int DesiredCapacity { get; set; }
        /// <summary>
        /// 仓库总库容。
        /// </summary>
        public int CRC { get; set; }
        /// <summary>
        /// 剩余空库容。
        /// </summary>
        public int RAC { get; set; }
        /// <summary>
        /// 已占库容的和。
        /// </summary>
        public int DRC { get; set; }
        /// <summary>
        /// 仓库剩余总库容。
        /// </summary>
        public int BAC { get; set; }
    }
    //均州现场
    //[SugarTable("dbo.")]