杨前锦
2025-06-06 16d2162a833cebeae72c363962917bb9da8145ef
福建佳通优化
13个文件已修改
286 ■■■■ 已修改文件
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/HH.WCS.Mobox3.FJJT.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/WmsController.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/TransfeRelevance.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/DeviceProcess.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/util/Settings.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/api/ApiHelper.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/wms/WMSHelper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/HH.WCS.Mobox3.FJJT.csproj
@@ -181,6 +181,7 @@
    <Compile Include="models\other\DayuanOut.cs" />
    <Compile Include="models\PutawayDetail.cs" />
    <Compile Include="models\PutawayOrder.cs" />
    <Compile Include="models\RfidAnomalyRecord.cs" />
    <Compile Include="models\Safety_Inventory.cs" />
    <Compile Include="models\SideLocConfig.cs" />
    <Compile Include="models\TN_ASN_Detail.cs" />
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
@@ -46,42 +46,18 @@
                WMSHelper.addAlarmRecord("流程异常", "低", $"WMS系统未查询到终点货位:{model.endLocCode}");
                throw new BusinessException($"WMS系统未查询到终点货位:{model.endLocCode},请检查终点货位编码是否正确");
            }
            else
            var areaCodes = Settings.getRelAreaCodes(endLoc.S_AREA_CODE);
            if (areaCodes.Count == 0)
            {
                if (endLoc.C_ENABLE == "Y")
                {
                    if (endLoc.N_LOCK_STATE != 0)
                    {
                        var existTask = WCSHelper.GetTaskByStartOrEnd(model.endLocCode);
                        if (existTask != null)
                        {
                            WMSHelper.addAlarmRecord("流程异常", "低", $"终点货位:{model.endLocCode} 已有任务");
                            throw new BusinessException($"终点货位:{model.endLocCode} 已有任务");
                        }
                        else
                        {
                            LocationHelper.UnLockLoc(model.endLocCode);  // 没有任务就,自动解锁终点货位
                        }
                    }
                }
                else
                {
                    WMSHelper.addAlarmRecord("流程异常", "低", $"终点货位:{model.endLocCode} 已禁用,请联系管理人员解除禁用");
                    throw new BusinessException($"终点货位:{model.endLocCode} 已禁用,请联系管理人员解除禁用");
                }
                WMSHelper.addAlarmRecord("流程异常", "低", $"未配置库区:{endLoc.S_AREA_CODE}的关联关系");
                throw new BusinessException($"未配置库区:{endLoc.S_AREA_CODE}的关联关系");
            }
            var transfeRelevance = WMSHelper.GetTransfeRelevance(model.endLocCode);  // 接驳货位关联属性
            if (transfeRelevance == null)
            {
                WMSHelper.addAlarmRecord("流程异常", "低", $"终点货位:{model.endLocCode},缺少配置属性,请联系管理人员进行配置属性");
                throw new BusinessException($"终点货位:{model.endLocCode},缺少配置属性,请联系管理人员进行配置属性");
            }
            Location startLoc = WMSHelper.getOutStockStartLoc(transfeRelevance.S_RELE_AREA, null);
            Location startLoc = WMSHelper.getOutStockStartLoc(areaCodes[0], null);
            if (startLoc == null)
            {
                WMSHelper.addAlarmRecord("流程异常", "低", $"未查询到空工装,立库可能缺少空工装");
                WMSHelper.addAlarmRecord("流程异常", "低", $"库区:{areaCodes[0]}未查询到空工装");
                throw new BusinessException($"未查询到空工装,立库可能缺少空工装");
            }
@@ -98,7 +74,7 @@
                    S_END_LOC = endLoc.S_CODE,
                    S_END_AREA = endLoc.S_AREA_CODE,
                    S_TYPE = "空工装出库任务",
                    S_OP_DEF_NAME = "空工装出库缓存位",
                    S_OP_DEF_NAME = "空工装出库",
                    N_PRIORITY = 10,
                    T_START_TIME = DateTime.Now,
                };
@@ -144,10 +120,10 @@
        /// <summary>
        /// WCS读码请求流程
        /// 1.判断RFID 是否读取成功(托盘号是否为空)
        /// 2.查询关于RFID的预创建任务
        /// 3.如果读取成功,则激活预创建任务
        /// 4.如果读取不成功,查看异常区是否有空货位,有则创建搬运异常区任务,无则,记录异常激活预创建任务
        /// 业务场景:读码入库、读码出库
        /// 1.判断RFID是否存在WMS系统中,否,则默认为RFID无法识别
        /// 2.判断RFID是否与任务RFID是否一致
        /// 3.记录RFID异常信息
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
@@ -155,47 +131,24 @@
            ResponseResult responseResult = new ResponseResult();
            Location loc = LocationHelper.GetLoc(request.loc);
            if (loc == null)
            if (loc != null)
            {
                WMSHelper.addAlarmRecord("流程异常", "中", $"读码位:{request.loc},没有在WMS系统中录入");
                throw new BusinessException($"读码位:{request.loc},没有在WMS系统中录入");
            }
            var locCntrRels = LocationHelper.GetLocCntr(request.loc);
            if (locCntrRels.Count > 0)
            {
                string taskCntrCode = locCntrRels[0].S_CNTR_CODE;
                // 2.查询关于RFID的预创建任务
                var cst = WCSHelper.GetPreCreatedTaskByCntr(taskCntrCode);
                var cst = WCSHelper.GetTask(request.taskNo);
                if (cst != null)
                {
                    bool errFlag = true;
                    // 1.判断RFID 是否读取成功(托盘号是否为空)
                    if (request.cntrNo != null)
                    var container = ContainerHelper.GetCntr(request.cntrNo);
                    if (container != null)
                    {
                        if (request.cntrNo == taskCntrCode)
                        if (cst.S_CNTR_CODE == request.cntrNo)
                        {
                            Container container = ContainerHelper.GetCntr(request.cntrNo);
                            if (container.N_E_STATE == 0)
                            {
                                errFlag = false;
                                WCSHelper.ActivatePreCreateTask(cst.S_OP_CODE);
                            }
                        }
                        else
                        {
                            ContainerHelper.UpdateCntrState(taskCntrCode, 1,"WCS反馈RFID与任务RFID不一致");
                            ContainerHelper.UpdateCntrState(cst.S_CNTR_CODE, 1);
                            WMSHelper.addRfidAnomalyRecord(cst.S_CNTR_CODE, 2, request.loc, cst.S_CODE);
                        }
                    }
                    else
                    else
                    {
                        ContainerHelper.UpdateCntrState(taskCntrCode, 1,"WCS反馈RFID为null");
                    }
                    // 方案1 4.激活预创建任务
                    if (errFlag)
                    {
                        WCSHelper.ActivatePreCreateTask(cst.S_OP_CODE,1);
                        ContainerHelper.UpdateCntrState(cst.S_CNTR_CODE, 1);
                        WMSHelper.addRfidAnomalyRecord(cst.S_CNTR_CODE, 1, request.loc, cst.S_CODE);
                    }
                    // 方案2 4.如果读取不成功,查看异常区是否有空货位  
@@ -233,15 +186,15 @@
                         WCSHelper.ActivatePreCreateTask(cst.S_OP_CODE);
                     }*/
                }
                else
                else
                {
                    WMSHelper.addAlarmRecord("流程异常", "低", $"读码位:{request.loc}触发读码请求,读码位上容器:{taskCntrCode}没有预创建任务");
                    WMSHelper.addAlarmRecord("流程异常", "低", $"没有查询到读码的任务,任务号:{request.taskNo}");
                }
            }
            else 
            {
                WMSHelper.addAlarmRecord("流程异常", "中", $"读码位:{request.loc},没有查询到容器");
                throw new BusinessException($"读码位:{request.loc},没有查询到容器");
                WMSHelper.addAlarmRecord("流程异常", "中", $"读码位:{request.loc},没有在WMS系统中录入");
                throw new BusinessException($"读码位:{request.loc},没有在WMS系统中录入");
            }
            return responseResult;
        }
@@ -267,43 +220,40 @@
        /// <returns></returns>
        public static ResponseResult offLineProcess(OffLineRequest model) {
            ResponseResult responseResult = new ResponseResult();
            // 查询起点货位是否存在已存在任务,防止任务重复发起
            var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc);
            if (existWmsTask == null)
            {
                // 判断满料接驳位对应的空工装缓存位状态(查询线体光电)
                // 查询对应机台的物料下线配置信息
                var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo);
                if (logicConfig != null)
                {
                    // 根据物料下线配置信息,判断任务类型是直连下线还是非直连下线
                    if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2")
                    {
                        // 满料下线(直连)
                        // 直连下线,需要判断校验RFID
                        LjMesTask mesTask = null;
                        if (model.cntrNo != null && model.cntrNo != "")
                        var container = ContainerHelper.GetCntr(model.cntrNo);
                        if (container != null)
                        {
                            var container = ContainerHelper.GetCntr(model.cntrNo);
                            if (container == null)
                            mesTask = WMSHelper.getLjMesTaskByCntr(model.cntrNo);
                            if (mesTask == null)
                            {
                                ContainerHelper.AddCntr(model.cntrNo);
                                ContainerHelper.UpdateCntrState(model.cntrNo, 1, $"满料下线(直连),WCS反馈的RFID:{model.cntrNo}在WMS系统中不存在");
                                WMSHelper.addAlarmRecord("流程异常", "中", $"满料下线(直连),WCS反馈的RFID:{model.cntrNo}在WMS系统中不存在");
                            }
                            else
                            {
                                ContainerHelper.UpdateCntrState(model.cntrNo, 0, "");
                                mesTask = WMSHelper.getLjMesTaskByCntr(model.cntrNo);
                                if (mesTask == null)
                                {
                                    ContainerHelper.UpdateCntrState(model.cntrNo, 1, $"未查询到MES任务");
                                    WMSHelper.addAlarmRecord("流程异常", "低", $"满料下线(直连),容器:{model.cntrNo}未查询到MES任务");
                                }
                                ContainerHelper.UpdateCntrState(model.cntrNo, 1);
                                WMSHelper.addRfidAnomalyRecord(model.cntrNo, 3, model.loc, null);
                            }
                        }
                        else 
                        {
                            model.cntrNo = ContainerHelper.GenerateCntrNo();
                            model.isNormal = false;
                        }
                        if (!model.isNormal)
                        {
                            ContainerHelper.AddCntr(model.cntrNo);
                            ContainerHelper.UpdateCntrState(model.cntrNo, 1, $"WCS反馈的RFID:{model.cntrNo} 为空");
                            WMSHelper.addAlarmRecord("流程异常", "中", $"WCS反馈的RFID:{model.cntrNo} 为空");
                            ContainerHelper.UpdateCntrState(model.cntrNo, 1);
                            WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null);
                        }
                        triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig, mesTask);
                    }
@@ -2194,6 +2144,7 @@
        {
            public string reqId { get; set; }
            public string reqTime { get; set; }
            public string taskNo { get; set; } // 托盘号
            public string loc { get; set; } // 货位 上料点、下料点、读码位、称重位(必填)
            public string cntrNo { get; set; } // 托盘号
            public int signalType { get; set; } //请求类型 1:下线请求 2:叫料请求 3:读码请求(必填)
@@ -2218,6 +2169,7 @@
            public string loc { get; set; } // 货位 上料点、下料点、读码位、称重位(必填)
            public string cntrNo { get; set; } // 托盘号
            public string jtNo { get; set; } // 机台号
            public bool isNormal { get; set; } //是否异常
        }
        /// <summary>
@@ -2227,6 +2179,7 @@
        {
            public string loc { get; set; } // 货位 上料点、下料点、读码位、称重位(必填)
            public string cntrNo { get; set; } // 托盘号
            public string taskNo { get; set; } // 任务号
        }
        public class AddTaskModel {
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/WmsController.cs
@@ -18,9 +18,7 @@
    {
        /// <summary>
        /// 1.空工装出库
        /// 业务场景:
        /// 1.直连流程初始化,补充空工装
        /// 2.非直连流程,固定站台自动补充空工装
        /// 业务场景:直连流程初始化,补充缓存位的空工装
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
@@ -36,7 +34,7 @@
            }
            catch (BusinessException be)
            {
                responseResult.code = 501;
                responseResult.code = 201;
                responseResult.msg = be.Message;
            }
            catch (Exception ex) 
@@ -45,7 +43,6 @@
                responseResult.msg = $"WMS内部错误,请联系开发人员处理";
                WMSHelper.addAlarmRecord("系统错误", "高", $"WMS内部错误: 空工装出库错误,错误原因:{ex.Message}");
            }
            LogHelper.Info("emptyPalletOutStock 出参:" + JsonConvert.SerializeObject(responseResult), "WMS");
            return responseResult;
        }
@@ -65,25 +62,25 @@
            ResponseResult responseResult = new ResponseResult();
            try
            {
                if (model.signalType == 1)  // 物料下线入库请求
                if (model.signalType == 1)  // 正常物料下线入库请求
                {
                    OffLineRequest request = new OffLineRequest() { loc = model.loc, cntrNo = model.cntrNo, jtNo = model.deviceNo };
                    OffLineRequest request = new OffLineRequest() { loc = model.loc, cntrNo = model.cntrNo, jtNo = model.deviceNo, isNormal = true};
                    responseResult = ApiHelper.offLineProcess(request);
                }
                else if (model.signalType == 3)  // 读码入库请求
                {
                    ReadCodeRequest request = new ReadCodeRequest() { loc = model.loc, cntrNo = model.cntrNo };
                    ReadCodeRequest request = new ReadCodeRequest() { loc = model.loc, cntrNo = model.cntrNo ,taskNo = model.taskNo };
                    responseResult = ApiHelper.readCodeProcess(request);
                }
                else if (model.signalType == 5)  // 异常工装入库请求
                {
                    OffLineRequest request = new OffLineRequest() { loc = model.loc, cntrNo = model.cntrNo, jtNo = model.deviceNo };
                    OffLineRequest request = new OffLineRequest() { loc = model.loc, cntrNo = model.cntrNo, jtNo = model.deviceNo , isNormal = false};
                    responseResult = ApiHelper.offLineProcess(request);
                }
            }
            catch (BusinessException be)
            {
                responseResult.code = 501;
                responseResult.code = 201;
                responseResult.msg = be.Message;
            }
            catch (Exception ex)
@@ -249,9 +246,9 @@
        public class OutStockModel
        {
            public string endLocCode { get; set; }
            public string reqId { get; set; }
            public string reqTime { get; set; }
            public string endLocCode { get; set; }
        }
    }
}
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json
@@ -8,6 +8,20 @@
  "FacCode": "0000",
  "WHCode": "W001",
  // 接驳区、缓存区、机台下线区、成型机叫料区 对应的立库库区
  "AreaRelevance": [
    {
      "areaCode": "",
      "relAreaCode": [ "" ]
    },
    {
      "areaCode": "",
      "relAreaCode": [ "" ]
    }
  ],
  // cntrType 1.胎面;2.胎侧;3.内衬;4.帘布;5.环带;6.冠带;7.钢包
  // type 1.直连 2.非直连
  "AreaProperty": [
@@ -50,7 +64,7 @@
    {
      "areaCode": "LBLKQ",
      "areaName": "环带库",
      "cntrType": [ 5,6 ],
      "cntrType": [ 5, 6 ],
      "type": 2
    },
    {
@@ -66,8 +80,6 @@
      "type": 2
    }
  ],
  "DeviceInfo": [
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/TransfeRelevance.cs
@@ -19,7 +19,6 @@
        public string S_RELE_AREA { get; set; } // 所属库区
        public string S_DEVICE_NO { get; set; } // 设备号         用途:用于查询线体光电,判断缓存位是否为空
        public int N_IS_MANUAL { get; set; } // 是否为人工 (0.非人工 2.人工)   用途:切换人工站台
        public int N_READ_LOC { get; set; } // 是否读码位 (0、否 1.是)
        public int N_READ_LOC { get; set; } // 是否读码位 (0、否 1.是)
    }
}
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/DeviceProcess.cs
@@ -35,7 +35,8 @@
                            // 修改参数6为3
                            /* NDCApi.ChangeOrderParam(cst.S_CODE, 6, "3");*/
                            // 修改容器异常状态
                            ContainerHelper.UpdateCntrState(cst.S_CNTR_CODE, 2, $"{plc.deviceNo}AGV扫码器,扫描RFID:{rfid}与任务RFID:{cst.S_CNTR_CODE}不一致");
                            ContainerHelper.UpdateCntrState(cst.S_CNTR_CODE, 1);
                            WMSHelper.addRfidAnomalyRecord(cst.S_CNTR_CODE, 2, cst.S_START_LOC, null);
                        }
                    }
                }
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/util/Settings.cs
@@ -16,6 +16,7 @@
        public static List<LinePlcInfo> linePlcInfo { get; set; }
        public static List<PlcValue> plcValue { get; set; }
        public static List<AreaProperty> areaPropertyList { get; set; }
        public static List<AreaRelevance> areaRelevanceList { get; set; }
        public static int port { get; set; }
        public static string WHCode { get; set; }
        public static string FacCode { get; set; }
@@ -73,6 +74,10 @@
                            {
                                areaPropertyList = JsonConvert.DeserializeObject<List<AreaProperty>>(keyValue.Value.ToString());
                            }
                            if (keyValue.Name == "AreaRelevance")
                            {
                                areaRelevanceList = JsonConvert.DeserializeObject<List<AreaRelevance>>(keyValue.Value.ToString());
                            }
                        }
                    }
                }
@@ -92,17 +97,34 @@
           return areaPropertyList.Where(a => a.cntrType.Contains(cntrType)).Select(a => a.areaCode).ToList();
        }
        /// <summary>
        /// 查询存储库区
        /// </summary>
        /// <param name="areaCode"></param>
        /// <returns></returns>
        public static List<string> getRelAreaCodes(string areaCode)
        {
            List<string> areaCodes = new List<string>();
            var areaRelevance = areaRelevanceList.Where(a => a.areaCode == areaCode).FirstOrDefault();
            if (areaRelevance != null)
            {
                areaCodes = areaRelevance.relAreaCode;
            }
            return areaCodes;
        }
        public class AreaRelevance
        {
            public string areaCode { get; set; }
            public List<string> relAreaCode { get; set; }
        }
        public class AreaProperty
        {
            public string areaName { get; set; }
            public string areaCode { get; set; }
            public List<int> cntrType { get; set; }  // 容器类型 1.胎面;2.胎侧;3.内衬;4.帘布;5.环带;6.冠带;7.钢包
        }
        public class deviceInfo {
            public string address { get; set; }
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs
@@ -79,31 +79,21 @@
            return res;
        }*/
        internal static bool AddCntr(string cntrCode ,int detallCount = 1)
        internal static bool AddCntr(string cntrCode ,int detallCount = 0)
        {
            var res = false;
            var db = new SqlHelper<object>().GetInstance();
            var TN_Container = new Container { S_CODE = cntrCode ,N_DETAIL_COUNT = detallCount };
            try
            {
                db.BeginTran();
                var container = db.Queryable<Container>().Where(a => a.S_CODE.Trim() == cntrCode).First();
                if (container == null)
                {
                    db.Insertable<Container>(TN_Container).ExecuteCommand();
                    res = db.Insertable<Container>(TN_Container).ExecuteCommand() > 0;
                }
                else
                {
                    container.N_DETAIL_COUNT = detallCount;
                    container.N_E_STATE = 0;
                    db.Updateable(container).ExecuteCommand();
                }
                db.CommitTran();
                res = true;
            }
            catch (Exception ex)
            {
                db.RollbackTran();
                WMSHelper.addAlarmRecord("系统错误", "高", $"添加容器错误,错误原因:{ex.Message}");
                throw new BusinessException($"添加容器错误,错误原因:{ex.Message}");
            }
@@ -322,17 +312,15 @@
        /// 
        /// </summary>
        /// <param name="cntrCode"></param>
        /// <param name="state">托盘异常状态  0.默认 1.WCS读码异常 2.AGV读码器读码异常</param>
        /// <param name="errMsg">异常信息</param>
        /// <param name="state">托盘异常状态  0.正常 1.异常</param>
        /// <returns></returns>
        internal static bool UpdateCntrState(string cntrCode, int state ,string errMsg) {
        internal static bool UpdateCntrState(string cntrCode, int state) {
            var res = false;
            var db = new SqlHelper<object>().GetInstance();
            var models = db.Queryable<Container>().Where(a => a.S_CODE.Trim() == cntrCode).ToList();
            if (models.Count > 0) {
                models.ForEach(a => {
                    a.N_E_STATE = state;
                    a.S_ERR_DESC = errMsg;
                    db.Updateable(a).UpdateColumns(it => new { it.N_E_STATE,it.S_ERR_DESC }).ExecuteCommand();
                });
                res = true;
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
@@ -392,6 +392,20 @@
           return db.Insertable<AlarmRecord>(alarmRecord).ExecuteCommand()>0;
        }
        public static bool addRfidAnomalyRecord(string rfid ,int anomalyType ,string locCode ,string taskNo)
        {
            var db = new SqlHelper<object>().GetInstance();
            RfidAnomalyRecord anomalyRecord = new RfidAnomalyRecord()
            {
                S_RFID = rfid,
                N_ANOMALY_TYPE = anomalyType,
                S_ANOMALY_TYPE = RfidAnomalyRecord.getAnomalyType(anomalyType),
                S_LOC_CODE = locCode,
                S_TASK_NO = taskNo
            };
            return db.Insertable<AlarmRecord>(anomalyRecord).ExecuteCommand() > 0;
        }
        /// <summary>
        /// 查询成型机线边
        /// </summary>
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/api/ApiHelper.cs
@@ -36,7 +36,7 @@
            ReturnResult result = new ReturnResult();
            try
            {
                if (model.taskType == "机台半制品入库" || model.taskType == "成型机余料回库")
                if (model.taskType.Contains("机台半制品入库") || model.taskType.Contains("成型机余料入库"))
                {
                    var itemInfos = model.itemInfo;
                    if (itemInfos == null || itemInfos.Count == 0)
@@ -61,6 +61,7 @@
                            // 计算生效时间、失效时间
                            var overage = WMSHelper.getOverage(item.bc_entried);
                            LogHelper.Info($"计算生效时间、失效时间,返回值:{JsonConvert.SerializeObject(overage)}", "WMS");
                            if (overage != null)
                            {
                                DateTime txndate = DateTime.Parse(item.txndate);
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs
@@ -92,6 +92,16 @@
                if (state == 1102)
                {
                    LogHelper.Info("向WCS发送取货完成安全退出信号", "AGV");
                    var locCntrRels = LocationHelper.GetLocCntr(cst.S_START_LOC);
                    if (locCntrRels.Count == 1)
                    {
                        var container = ContainerHelper.GetCntr(locCntrRels[0].S_CNTR_CODE);
                        if (container != null && container.N_TYPE == 0)
                        {
                            LogHelper.Info("取货完成后,起点货位存在母拖,下发母拖入库任务", "AGV");
                            ApiHelper.baseTrayInStock(cst.S_START_LOC, mst.S_CODE);
                        }
                    }
                    /*result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "2");  //取货完成安全退出*/
                    result = true;
                }
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/wms/WMSHelper.cs
@@ -943,18 +943,14 @@
            var sql1 = "SELECT get_minhour_bar(@barcode, @mcngrp) AS overage_value";
            // 使用匿名对象传递参数
            var ovg_bar = db.Ado.SqlQuery<int>(sql, new { barcode = bc_entried, mcngrp = "1"});
            var minhour_bar = db.Ado.SqlQuery<float>(sql1, new { barcode = bc_entried, mcngrp = "1"});
            if (ovg_bar.Count > 0 && minhour_bar.Count > 0)
            var ovg_bar = db.Ado.SqlQuery<int>(sql, new { barcode = bc_entried, mcngrp = "1"}).First();
            var minhour_bar = db.Ado.SqlQuery<float>(sql1, new { barcode = bc_entried, mcngrp = "1"}).First();
            Overage overage = new Overage()
            {
                Overage overage = new Overage()
                {
                    MINHOUR = minhour_bar[0],
                    OVERAGE = ovg_bar[0]
                };
                return overage;
            }
            return null;
                MINHOUR = minhour_bar,
                OVERAGE = ovg_bar
            };
            return overage;
        }
        /// <summary>
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
@@ -48,7 +48,7 @@
                OffLineRecord record = new OffLineRecord()
                {
                    S_RFID = model.rfid,
                    S_DEVICE_NO = model.S_DEVICE_NO,
                    S_DEVICE_NO = model.deviceNo,
                    N_IS_URGENT = model.isUrgent,
                    T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    N_IS_FULL = model.isFull,
@@ -948,7 +948,7 @@
        public class OffLineModel
        {
            public string rfid { get; set; } // 托盘号
            public string S_DEVICE_NO { get; set; } // 机台号
            public string deviceNo { get; set; } // 机台号
            public int isUrgent { get; set; } // N_IS_URGENT 是否加急(0.否 1.是)
            public int isFull { get; set; } // 是否满拖 0.否 1.是
        }