using HH.WCS.NongFuChaYuan.DeviceService; using HH.WCS.NongFuChaYuan.DispatchService; using HH.WCS.NongFuChaYuan.TaskController; using HH.WCS.NongFuChaYuan.OtherService; using HH.WCS.NongFuChaYuan.WmsService; using Newtonsoft.Json; using System.Collections.Generic; using System.Linq; using System.Threading; using static HH.WCS.NongFuChaYuan.ApiService.ApiModel; using static HH.WCS.NongFuChaYuan.ApiService.OtherModel; using System; namespace HH.WCS.NongFuChaYuan.ApiService { /// /// API接口实现类 /// public class ApiHelper { static ApiHelper() { } #region HostToAgv接口实现类 /// /// AGV信号处理 /// /// public static void OperateTaskStatus(AgvTaskState model) { if (string.IsNullOrEmpty(model.No)) { //无任务号请求(交管) DeviceProcess.SpecialTraffic(model.ForkliftNo, model.LockNo, model.State); } else { var wmsTask = TaskHelper.GetTask(model.No); if (wmsTask != null) { if (model.ForkliftNo != "0") { if (model.State <= 7) { if (!TaskHelper.CheckActionRecordExist(model.No, model.State.ToString())) { //有任务号请求 switch (model.State) { case 1: TaskHelper.Begin(wmsTask, model.ForkliftNo); break; #region MyRegion case 3: TaskHelper.UpdateStatus(wmsTask, "开始取货"); break; case 4: TaskProcess.OperateStatus(wmsTask, 4); TaskHelper.UpdateStatus(wmsTask, "取货完成"); break; case 5: TaskHelper.UpdateStatus(wmsTask, "开始卸货"); break; case 6: TaskProcess.OperateStatus(wmsTask, 6); TaskHelper.UpdateStatus(wmsTask, "卸货完成"); break; #endregion case 2: if (!TaskHelper.CheckActionRecordExist(model.No, "6")) { TaskProcess.OperateStatus(wmsTask, 6); } TaskHelper.End(wmsTask); break; case 7: TaskProcess.OperateStatus(wmsTask, 7); TaskHelper.Fail(wmsTask); break; } TaskHelper.UpdateAgvNo(wmsTask, model.ForkliftNo); TaskHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData); TaskProcess.ThirdReportStatus(wmsTask.S_SRC_NO.Trim(), model.ForkliftNo, model.State, model.ExtData, wmsTask); TaskProcess.GeneralInterFaceFunc(wmsTask, model.State.ToString()); TaskProcess.RoboticarmTask(wmsTask, model.State); } } else { //安全请求等 TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData); TaskHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData); } } } } } internal static SimpleResult AddTask(ApiModel.AddTaskModel model) { var result = new SimpleResult(); var db = new SqlHelper().GetInstance(); if (!string.IsNullOrEmpty(model.StartBit) && !string.IsNullOrEmpty(model.EndBit)) { //创建点到点自动转运任务 IntensiveArea.DaMingShanCreateTransport(model.StartBit, model.EndBit, "点到点转运", model.TrayCode, 1, 1, "", 1); } else if (!string.IsNullOrEmpty(model.StartBit) && string.IsNullOrEmpty(model.EndBit)) { //根据配置文件来选择终点库区 if (!string.IsNullOrEmpty(model.ItemCode)) { var info = Settings.GetItemCacheAreaList().Where(a => a.ItemCode == model.ItemCode).FirstOrDefault(); if (info != null) { string areaNo = info.AreaCode; var endbitlist = db.Queryable().Where(a => a.S_AREA_CODE == areaNo && a.N_CURRENT_NUM == 0) .PartitionBy(a => a.N_ROW) .OrderBy(a => a.N_COL) .Take(1) .ToList(); foreach (var item in endbitlist) { var lockinfo = db.Queryable().Where(a => a.S_AREA_CODE == item.S_AREA_CODE && a.N_ROW == item.N_ROW && a.S_LOCK_STATE != "无").First(); if (lockinfo == null) { //创建任务 IntensiveArea.DaMingShanCreateTransport(model.StartBit, item.S_LOC_CODE, "点到点转运", model.TrayCode, 1, 1, "", 1); break; } } } else { result.resultCode = 1; result.resultMsg = "物料编码对应的库区未配置"; } } else { result.resultCode = -2; result.resultMsg = "物料编码不能为空"; } } else { result.resultCode = -1; result.resultMsg = "起点不能为空"; } return result; } static object AGVDeviceReceiveLock = new object(); /// /// AGV状态处理 /// /// /// /// /// /// /// internal static void AGVDeviceReceiveSet(string forkliftNo, string battery, string agvCurrTaskInfo, string errCode, string errCode2, string faildCode) { lock (AGVDeviceReceiveLock) { var db = new SqlHelper().GetInstance(); var agvDeviceInfo = db.Queryable().Where(a => a.agvNo == forkliftNo).First(); if (agvDeviceInfo == null) { var agvInfo = new HangChaAGV() { agvNo = forkliftNo, agvBattery = battery, agvCurrTaskInfo = agvCurrTaskInfo, agvErrCode = errCode, errCode2 = errCode2, faildCode = faildCode }; db.Insertable(agvInfo).ExecuteCommand(); } else { agvDeviceInfo.agvBattery = battery; agvDeviceInfo.agvCurrTaskInfo = agvCurrTaskInfo; agvDeviceInfo.agvErrCode = errCode; agvDeviceInfo.errCode2 = errCode2; agvDeviceInfo.faildCode = faildCode; db.Updateable(agvDeviceInfo).UpdateColumns(a => new { a.agvBattery, a.agvCurrTaskInfo, a.agvErrCode, a.errCode2, a.faildCode }).ExecuteCommand(); } } } #endregion #region Mobox接口实现类 /// /// Mobox取消任务 /// /// /// /// internal static SimpleResult MoboxCancelTask(MoboxTaskBase model, SimpleResult result) { var task = TaskHelper.GetTask(model.TaskNo); if (task != null) { if (task.S_B_STATE.Trim() == "未执行") { //未执行直接修改状态为取消 result.resultMsg = "任务未执行,直接取消"; TaskHelper.UpdateStatus(model.TaskNo.Trim(), "取消"); //task.S_B_STATE = "取消"; TaskProcess.OperateStatus(task, 7); //TaskProcess.TaskCanCelOrComplete(task); TaskProcess.GeneralInterFaceFunc(task, "7"); } else if (task.S_B_STATE.Trim() == "已推送") { //已推送但是小车未执行,取消需要通知HOSTTOAGV NDCHelper.Cancel(task.S_TASK_NO.Trim()); result.resultMsg = "任务取消已经发送给小车"; TaskHelper.UpdateStatus(model.TaskNo.Trim(), "取消"); //task.S_B_STATE = "取消"; TaskProcess.OperateStatus(task, 7); //TaskProcess.TaskCanCelOrComplete(task); TaskProcess.GeneralInterFaceFunc(task, "7"); } else { result.resultCode = 1; result.resultMsg = "任务已结束或处于执行中,不允许取消!"; } } else { result.resultCode = 1; result.resultMsg = "任务不存在"; } return result; } internal static SimpleResultModel BindingTrayCode(BindingTrayCodeModel model) { var result = new SimpleResultModel { success = false }; var db = new SqlHelper().GetInstance(); if (!string.IsNullOrEmpty(model.location) && !string.IsNullOrEmpty(model.TrayInfo)) { var locinfo = db.Queryable().Where(a => a.S_LOC_CODE == model.location).First(); if (locinfo != null) { var info = db.Queryable().Where(a => a.S_LOC_CODE == model.location && a.S_CNTR_CODE == model.TrayInfo).First(); if (info == null) { locinfo.N_CURRENT_NUM++; if (locinfo.N_CURRENT_NUM <= locinfo.N_CAPACITY) { var cntrinfo = new LocCntrRel { S_LOC_CODE = model.location, S_CNTR_CODE = model.TrayInfo }; db.Insertable(cntrinfo).ExecuteCommand(); db.Updateable(locinfo).UpdateColumns(a => new { a.N_CURRENT_NUM }).ExecuteCommand(); result.success = true; result.errCode = 0; } else { result.errCode = -2; result.errMsg = "当前数量超过最大容量 不允许绑定"; } } else { result.errCode = -2; result.errMsg = "货位容器表中该站点已绑定该托盘"; } } else { result.errCode = -1; result.errMsg = "错误的货位编码"; } } else { result.errCode = -1; result.errMsg = "参数不能为空"; } return result; } /// /// 空托绑定解绑接口 /// /// /// internal static SimpleResultModel EmptyLocaBindAUnBind(EmptyLocaBindAUnBindModel model) { SimpleResultModel result = new SimpleResultModel { success = false, errCode = -1 }; string msg = ""; if (!string.IsNullOrEmpty(model.Location)) { var db = new SqlHelper().GetInstance(); var locInfo = db.Queryable().Where(a => a.S_LOC_CODE == model.Location).First(); if (locInfo != null) { if (model.BindState == "1") { var firstLocInfo = db.Queryable().Where(a => a.N_ROW == locInfo.N_ROW.Trim()).OrderBy(a => a.N_COL).Take(1).First(); if (firstLocInfo != null) { string note = string.IsNullOrEmpty(firstLocInfo.S_NOTE) ? "" : firstLocInfo.S_NOTE.Trim(); if (string.IsNullOrEmpty(note)) { locInfo.N_CURRENT_NUM = locInfo.N_CAPACITY; //locInfo.S_NOTE = model.BindType; db.Updateable(locInfo).UpdateColumns(a => new { a.N_CURRENT_NUM }).ExecuteCommand(); result.success = true; result.errCode = 0; msg = $"空托绑定解绑接口:货位:{model.Location},绑定:成功!"; } else msg = $"空托绑定解绑接口:与当前库位:{locInfo.N_ROW.Trim()}已存放托盘类型不匹配!"; } } else if (model.BindState == "2") { locInfo.N_CURRENT_NUM = 0; //locInfo.S_NOTE = ""; db.Updateable(locInfo).UpdateColumns(a => new { a.N_CURRENT_NUM }).ExecuteCommand(); result.success = true; result.errCode = 0; msg = $"空托绑定解绑接口:货位:{model.Location},解绑:成功!"; } } else msg = $"空托绑定解绑接口:未查到货位编码为:{model.Location}的货位信息!"; } else msg = $"空托绑定解绑接口:传输数据异常,货位编码为空!"; LogHelper.Info("EmptyLocaBindAUnBind Dispose:" + msg, "ThirdSystemLog"); result.errMsg = msg; return result; } internal static SimpleResultModel BindingItemCode(BindingItemCodeModel model) { SimpleResultModel result = new SimpleResultModel { success = false, errCode = -1 }; var db = new SqlHelper().GetInstance(); if (!string.IsNullOrEmpty(model.TrayInfo) && !string.IsNullOrEmpty(model.Location)) { var locinfo = db.Queryable().Where(a => a.S_LOC_CODE == model.Location).First(); if (locinfo != null) { if (locinfo.N_CURRENT_NUM < locinfo.N_CAPACITY) { locinfo.N_CURRENT_NUM = locinfo.N_CURRENT_NUM + 1; db.Updateable(locinfo).UpdateColumns(a => new { a.N_CURRENT_NUM }).ExecuteCommand(); var cntrinfo = db.Queryable().Where(a => a.S_CNTR_CODE == model.TrayInfo).First(); if (cntrinfo == null) { LocCntrRel info = new LocCntrRel { S_CNTR_CODE = model.TrayInfo, S_LOC_CODE = model.Location }; db.Insertable(info).ExecuteCommand(); var iteminfo = db.Queryable().Where(a => a.S_CNTR_CODE == model.TrayInfo).First(); if (iteminfo == null) { IntensiveArea.BindCntrItem(model.TrayInfo, model.ItemCode, model.BatchNo); result.success = true; result.errCode = 0; } else { result.errMsg = "物料表中已有该托盘物料信息,请检查托盘号或已重复绑定"; } } else { result.errMsg = "该托盘已绑定,请确定托盘号是否正确"; } } else { result.errMsg = "该货位数量大于等于容量"; } } else { result.errMsg = "站点编码异常"; } } else { result.errMsg = "托盘号不能为空"; } return result; } internal static SimpleResultModel FuWeiInfo(FuWeiInfomodel model) { SimpleResultModel result = new SimpleResultModel { success = false, errCode = -1 }; if (!string.IsNullOrEmpty(model.deviceName)) { var info = Settings.GetDeviceInfoList().Where(a => a.deviceName == model.deviceName).FirstOrDefault(); if (info != null) { if (string.IsNullOrEmpty(model.location)) { //直接发送PLC消息 PlcHelper.SendHex(info.address, "3F00100D0A"); } else { //匹配下件口发送对应的PLC消息 if (info.location[0] == model.location) { PlcHelper.SendHex(info.address, "3F00100D0A"); } else { PlcHelper.SendHex(info.address, "3F00200D0A"); } } result.success = true; result.errCode = 0; } else result.errMsg = $"产线号{model.deviceName}异常 配置文件找不到该产线号"; } else result.errMsg = "产线号不能为空"; return result; } /// /// Mobox强制完成任务 /// /// /// /// internal static SimpleResult MoboxCompleteTask(MoboxTaskBase model, SimpleResult result) { var task = TaskHelper.GetTask(model.TaskNo); if (task != null) { if (!TaskHelper.CheckActionRecordExist(task.S_TASK_NO, "1")) { result.resultMsg = "任务未执行,不允许强制完成!"; result.resultCode = 1; } else if (TaskHelper.CheckActionRecordExist(task.S_TASK_NO, "4") && task.S_TYPE.Trim() != "取消" && task.S_TYPE.Trim() != "失败" && task.S_TYPE.Trim() != "完成") { //已推送但是没有完成或者取消,通知hosttoagv result.resultMsg = "任务完成已经发送给小车"; TaskHelper.UpdateStatus(model.TaskNo.Trim(), "完成"); NDCHelper.Cancel(task.S_TASK_NO.Trim()); TaskProcess.TaskCanCelOrComplete(task, false); TaskProcess.TASK_STATUSFunc(task); TaskProcess.GeneralInterFaceFunc(task, "2"); } else if (!TaskHelper.CheckActionRecordExist(task.S_TASK_NO, "4") && task.S_TYPE.Trim() != "取消" && task.S_TYPE.Trim() != "失败" && task.S_TYPE.Trim() != "完成") { //已推送但是没有完成或者取消,通知hosttoagv result.resultMsg = "任务取消已经发送给小车"; TaskHelper.UpdateStatus(model.TaskNo.Trim(), "取消"); NDCHelper.Cancel(task.S_TASK_NO.Trim()); //TaskProcess.TaskCanCelOrComplete(task, false); //TaskProcess.TASK_STATUSFunc(task); TaskProcess.OperateStatus(task, 7); TaskProcess.GeneralInterFaceFunc(task, "7"); } else { result.resultCode = 1; result.resultMsg = "任务已结束"; } } else { result.resultCode = 1; result.resultMsg = "任务不存在"; } return result; } internal static SimpleResult WeiTuo(MoboxTaskBase model) { var result = new SimpleResult(); var db = new SqlHelper().GetInstance(); var task = TaskHelper.GetTask(model.TaskNo); if (task != null) { NDCHelper.Cancel(task.S_TASK_NO.Trim()); result.resultMsg = "任务取消已经发送给小车"; result.resultCode = 0; TaskHelper.UpdateStatus(model.TaskNo.Trim(), "取消"); //TaskProcess.OperateStatus(task, 7); //TaskProcess.TaskCanCelOrComplete(task); TaskProcess.GeneralInterFaceFunc(task, "7"); //IntensiveArea.ULlock(task.S_END_LOC); //解绑起点托盘 //var trayInfoList = db.Queryable().Where(a => a.S_LOC_CODE == task.S_START_LOC).ToList(); var trayInfoList = task.S_CNTRS.Split(',').ToList(); if (trayInfoList.Count() > 0) { trayInfoList.ForEach(a => { db.Deleteable().Where(b => b.S_CNTR_CODE == a).ExecuteCommand(); db.Deleteable().Where(b => b.S_CNTR_CODE == a).ExecuteCommand(); }); } LocationHelper.UnLockLoc(task.S_START_LOC); LocationHelper.UnLockLoc(task.S_END_LOC, task.S_TYPE); } else { result.resultMsg = "该任务号不存在"; result.resultCode = -1; } return result; } internal static SimpleResultModel BHYiKuworkinfo(YiKuworkinfomodel model) { string endloc = ""; int yikunum = 0; SimpleResultModel result = new SimpleResultModel { success = false }; var db = new SqlHelper().GetInstance(); if (!string.IsNullOrEmpty(model.S_WorkNo)) { var info = db.Queryable().Where(a => a.S_WorkNo == model.S_WorkNo).First(); if (info == null) { var rowlist = db.Queryable() .Where(a => a.S_AREA_CODE == model.S_EndLoca && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "无") .PartitionBy(a => a.N_ROW) .Take(1) .ToList(); foreach (var item in rowlist) { endloc = endloc + item.N_ROW + ","; } if (model.S_YiKuNum == 0) { yikunum = 9999; } else { yikunum = model.S_YiKuNum; } WorkOrder wmsTask = new WorkOrder() { S_WorkNo = model.S_WorkNo, //S_PLineNo = model.DeviceName, //S_UsingNo = "N", S_ORDER_TYPE = "备货移库", S_ItemCode = model.S_ItemCode, S_WorkState = model.S_WorkState, S_StartLoca = model.S_StartLoca, S_EndLoca = endloc, S_YiKuNum = yikunum, S_BatchNo = model.S_BatchNo //S_Modify = model.WorkTime }; WCSHelper.DaMingShanInsertWork(wmsTask); result.success = true; result.errMsg = $"工单信息接收成功,工单已创建!"; } else { result.errMsg = "工单号重复,工单表中有相同的数据"; result.errCode = -2; } } else { result.errMsg = "工单号不能为空"; result.errCode = -1; } return result; } internal static SimpleResultModel YiKuworkinfo(YiKuworkinfomodel model) { SimpleResultModel result = new SimpleResultModel { success = false }; var db = new SqlHelper().GetInstance(); if (!string.IsNullOrEmpty(model.S_WorkNo)) { var info = db.Queryable().Where(a => a.S_WorkNo == model.S_WorkNo).First(); if (info == null) { WorkOrder wmsTask = new WorkOrder() { S_WorkNo = model.S_WorkNo, //S_PLineNo = model.DeviceName, //S_UsingNo = "N", S_ORDER_TYPE = "人工移库", S_ItemCode = model.S_ItemCode, S_WorkState = model.S_WorkState, S_StartLoca = model.S_StartLoca, S_EndLoca = model.S_EndLoca, S_YiKuNum = model.S_YiKuNum, S_BatchNo = model.S_BatchNo //S_Modify = model.WorkTime }; WCSHelper.DaMingShanInsertWork(wmsTask); result.success = true; result.errMsg = $"工单信息接收成功,工单已创建!"; } else { result.errMsg = "工单号重复,工单表中有相同的数据"; result.errCode = -2; } } else { result.errMsg = "工单号不能为空"; result.errCode = -1; } return result; } /// /// 无码模式-人工分拣出库接口解绑托盘 /// /// /// internal static SimpleResultModel NoCodeUnbindingTrayCode(NoCodeUnbindingTrayCodeModel model) { var result = new SimpleResultModel { success = false, errCode = -1 }; string msg = ""; string locCode = ""; string areaCode = ""; var db = new SqlHelper().GetInstance(); if (!string.IsNullOrEmpty(model.RowNo) && !string.IsNullOrEmpty(model.LockState)) { var rowinfo = db.Queryable().Where(a => a.N_ROW == model.RowNo && (a.S_LOCK_STATE.Trim() == "入库锁" || a.S_LOCK_STATE.Trim() == "移库锁" || a.S_LOCK_STATE.Trim() == "出库锁")).First(); if (rowinfo == null) { if (model.LockState == "1") { //var rowInfo = db.Queryable().Where(a => a.N_ROW == model.RowNo).First(); //if (rowInfo != null) //{ // TaskController.Monitor.YiKuUnLockRow(db, model.RowNo.Trim(), rowInfo.S_AREA_CODE.Trim(), false); var locInfo = db.Queryable().Where(a => a.N_ROW == model.RowNo.Trim()).ToList(); if (locInfo.Count() > 0) { locInfo.ForEach(a => { if (a.S_LOCK_STATE.Trim() != "报废") { a.S_LOCK_STATE = "其他锁"; db.Updateable(a).UpdateColumns(b => new { b.S_LOCK_STATE }).ExecuteCommand(); } }); } result.success = true; result.errCode = 0; // } } else if (model.LockState == "2") { var locInfoList = db.Queryable().Where(a => a.N_ROW == model.RowNo.Trim()).ToList(); if (locInfoList.Count > 0) { for (int i = 0; i < locInfoList.Count; i++) { if (locInfoList[i].S_LOCK_STATE.Trim() != "报废") { areaCode = locInfoList[i].S_AREA_CODE.Trim(); locCode = locInfoList[i].S_LOC_CODE.Trim(); var locInfo = db.Queryable().Where(a => a.S_LOC_CODE == locCode).First(); //if (model.IsDelete == "1") //{ // var trayInfoList = db.Queryable().Where(a => a.S_LOC_CODE == locCode).ToList(); // if (trayInfoList.Count() > 0) // { // trayInfoList.ForEach(a => // { // db.Deleteable().Where(b => b.S_CNTR_CODE == a.S_CNTR_CODE.Trim()).ExecuteCommand(); // db.Deleteable().Where(b => b.S_CNTR_CODE == a.S_CNTR_CODE.Trim()).ExecuteCommand(); // }); // } // locInfo.N_CURRENT_NUM = 0; //} //else if(model.IsDelete=="3") //{ // locInfo.N_CURRENT_NUM = locInfo.N_CAPACITY; //} locInfo.S_LOCK_STATE = "无"; db.Updateable(locInfo).UpdateColumns(a => new { a.S_LOCK_STATE }).ExecuteCommand(); } } result.success = true; result.errCode = 0; //TaskController.Monitor.YiKuUnLockRow(db, model.RowNo, areaCode); } } else if (model.LockState == "3") { var locInfoList = db.Queryable().Where(a => a.N_ROW == model.RowNo.Trim()).ToList(); if (locInfoList.Count > 0) { for (int i = 0; i < locInfoList.Count; i++) { if (locInfoList[i].S_LOCK_STATE.Trim() != "报废") { areaCode = locInfoList[i].S_AREA_CODE.Trim(); locCode = locInfoList[i].S_LOC_CODE.Trim(); var locInfo = db.Queryable().Where(a => a.S_LOC_CODE == locCode).First(); //if (model.IsDelete == "1") //{ // var trayInfoList = db.Queryable().Where(a => a.S_LOC_CODE == locCode).ToList(); // if (trayInfoList.Count() > 0) // { // trayInfoList.ForEach(a => // { // db.Deleteable().Where(b => b.S_CNTR_CODE == a.S_CNTR_CODE.Trim()).ExecuteCommand(); // db.Deleteable().Where(b => b.S_CNTR_CODE == a.S_CNTR_CODE.Trim()).ExecuteCommand(); // }); // } // locInfo.N_CURRENT_NUM = 0; //} //else if(model.IsDelete=="3") //{ locInfo.N_CURRENT_NUM = locInfo.N_CAPACITY; //} //locInfo.S_LOCK_STATE = "无"; db.Updateable(locInfo).UpdateColumns(a => new { a.N_CURRENT_NUM }).ExecuteCommand(); } } result.success = true; result.errCode = 0; //TaskController.Monitor.YiKuUnLockRow(db, model.RowNo, areaCode); } } else if (model.LockState == "4") { var locInfoList = db.Queryable().Where(a => a.N_ROW == model.RowNo.Trim()).ToList(); if (locInfoList.Count > 0) { for (int i = 0; i < locInfoList.Count; i++) { if (locInfoList[i].S_LOCK_STATE.Trim() != "报废") { areaCode = locInfoList[i].S_AREA_CODE.Trim(); locCode = locInfoList[i].S_LOC_CODE.Trim(); var locInfo = db.Queryable().Where(a => a.S_LOC_CODE == locCode).First(); //if (model.IsDelete == "1") //{ var trayInfoList = db.Queryable().Where(a => a.S_LOC_CODE == locCode).ToList(); if (trayInfoList.Count() > 0) { trayInfoList.ForEach(a => { db.Deleteable().Where(b => b.S_CNTR_CODE == a.S_CNTR_CODE.Trim()).ExecuteCommand(); db.Deleteable().Where(b => b.S_CNTR_CODE == a.S_CNTR_CODE.Trim()).ExecuteCommand(); }); } locInfo.N_CURRENT_NUM = 0; //} //else if(model.IsDelete=="3") //{ //locInfo.N_CURRENT_NUM = locInfo.N_CAPACITY; //} //locInfo.S_LOCK_STATE = "无"; db.Updateable(locInfo).UpdateColumns(a => new { a.N_CURRENT_NUM }).ExecuteCommand(); } } result.success = true; result.errCode = 0; //TaskController.Monitor.YiKuUnLockRow(db, model.RowNo, areaCode); } } } else { msg = "该排有入库锁或移库锁,不予绑定解绑"; } } else if (!string.IsNullOrEmpty(model.Location) && !string.IsNullOrEmpty(model.LockState)) { var locinfo = db.Queryable().Where(a => a.S_LOC_CODE == model.Location && a.S_LOCK_STATE.Trim() == "无").First(); if (locinfo != null) { if (model.LockState == "5") { if (locinfo.S_LOCK_STATE != "报废") { locinfo.N_CURRENT_NUM = locinfo.N_CAPACITY; db.Updateable(locinfo).UpdateColumns(it => new { it.N_CURRENT_NUM }).ExecuteCommand(); LocCntrRel info = new LocCntrRel { S_LOC_CODE = locinfo.S_LOC_CODE, S_CNTR_CODE = model.TrayNo, S_TRAY_TYPE = model.Type }; db.Insertable(info).ExecuteCommand(); result.success = true; result.errCode = 0; } else { msg = "该货位状态为报废 不允许绑定操作"; } } if (model.LockState == "6") { locinfo.N_CURRENT_NUM = 0; db.Updateable(locinfo).UpdateColumns(it => new { it.N_CURRENT_NUM }).ExecuteCommand(); db.Deleteable().Where(a => a.S_LOC_CODE == locinfo.S_LOC_CODE).ExecuteCommand(); result.success = true; result.errCode = 0; } } else { msg = "该货位状态异常,不予绑定解绑"; } } else msg = $"MOBOX传输数据异常!传输为空值!"; result.errMsg = msg; LogHelper.Info("NoCodeUnbindingTrayCode Dispose:" + result.errMsg, "ThirdSystemLog"); return result; } #endregion #region 项目定制 #region 西门子接口实现类 /// /// 强制充电接口 /// /// /// internal static SimpleResultModel ForcedCharging(OtherModel.ForcedChargingModel model) { SimpleResultModel result = new SimpleResultModel { errCode = -1 }; try { bool charge = NDCHelper.SendChargeTask(model.agvNo); if (charge) { result.errCode = 0; result.errMsg = "推送小车充电成功!"; result.success = true; } else { result.errMsg = "推送小车充电失败!"; result.success = false; } } catch { result.errMsg = "推送小车充电失败,未查询到车号!"; result.success = false; } return result; } /// /// 取消任务接口 /// /// /// internal static SimpleResultModel CancelTask(CancelTaskModel model) { SimpleResultModel result = new SimpleResultModel { errCode = -1, success = false }; var task = TaskHelper.GetTaskBySrcNo(model.taskNo); if (task != null) { if (task.S_B_STATE.Trim() == "未执行") { //未执行直接修改状态为取消 TaskHelper.UpdateStatus(task.S_TASK_NO, "取消"); result.success = true; result.errCode = 0; result.errMsg = "任务未执行,取消成功"; } else if (task.S_B_STATE.Trim() != "取消" && task.S_B_STATE.Trim() != "完成") { //已推送但是没有完成或者取消,通知hosttoagv NDCHelper.Cancel(task.S_TASK_NO.Trim()); result.success = true; result.errCode = 0; result.errMsg = "任务取消已经发送给小车"; } else result.errMsg = "任务已结束"; } else result.errMsg = "任务不存在"; return result; } /// /// 调整优先级接口 /// /// /// internal static SimpleResultModel SetPriority(SetPriorityModel model) { SimpleResultModel result = new SimpleResultModel { success = true, errCode = -1 }; var taskPriority = TaskHelper.GetTaskBySrcNo(model.taskNo); if (taskPriority != null) { if (taskPriority.S_B_STATE == "未执行" || taskPriority.S_B_STATE == "待推送" || taskPriority.S_B_STATE == "已推送") { TaskHelper.UpdatePriority(taskPriority.S_TASK_NO, int.Parse(model.priority));//更改表数据 //if (taskPriority.S_B_STATE == "已推送") ; result.errCode = 0; result.errMsg = $"更改优先级成功!任务号:{model.taskNo}"; result.success = true; } else { result.errMsg = $"更改优先级失败,当前任务已执行!任务号:{model.taskNo}"; result.success = false; } } else { result.errMsg = $"更改优先级失败,当前任务已经执行完毕或取消!任务号:{model.taskNo}"; result.success = false; } LogHelper.Debug("SetPriority Request:" + JsonConvert.SerializeObject(result)); return result; } /// /// 创建任务接口 /// /// /// internal static SimpleResultModel AddTask(OtherModel.AddTaskModel model) { SimpleResultModel result = new SimpleResultModel { errCode = 0 }; bool req = false; //string trayCodeType = ProcessHelper.GetTrayCode(model.trayCode);//获取托盘类型-对应杭叉提供参数 //来源号判断是否存在 if (!TaskHelper.CheckExistSrc(model.taskNo)) { if (LocationHelper.CheckExist(model.startBit) && LocationHelper.CheckExist(model.endBit)) { req = TaskHelper.CreateTask(model.taskNo, model.startBit, model.endBit, model.taskType, 99, model.trayCode); } if (req == false) { result.errCode = -1; result.success = false; result.errMsg = "创建任务失败"; } else { result.errCode = 0; result.success = true; result.errMsg = "创建成功"; } } else { result.errCode = -1; result.success = false; result.errMsg = "任务已存在,无法再次创建!"; } return result; } #endregion #endregion } }