| | |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 1.创建入库任务 |
| | | /// </summary> |
| | |
| | | ReturnResult result = new ReturnResult(); |
| | | try |
| | | { |
| | | if (model.taskType == "机台半制品入库" || model.taskType == "成型机余料回库") |
| | | if (model.taskType.Contains("机台半制品入库") || model.taskType.Contains("成型机余料入库") || model.taskType.Contains("半制品抽检入库")) |
| | | { |
| | | var itemInfos = model.itemInfo; |
| | | if (itemInfos == null || itemInfos.Count == 0) |
| | |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "物料信息不能为空"; |
| | | return result; |
| | | } |
| | | else |
| | | { |
| | | foreach (var item in itemInfos) |
| | | { |
| | | // 将MES的物料状态转化成WMS可识别的物料状态 |
| | | if (item.jdge == "" || item.jdge == null) |
| | | { |
| | | item.jdge = "OK"; |
| | | } |
| | | else if(item.jdge != "OK") |
| | | { |
| | | item.jdge = "HOLD"; |
| | | } |
| | | |
| | | // 计算生效时间、失效时间 |
| | | var overage = WMSHelper.getOverage(item.bc_entried); |
| | | if (overage != null) |
| | | { |
| | | DateTime txndate = DateTime.Parse(item.txndate); |
| | | DateTime minTime = txndate.AddHours(overage.MINHOUR); |
| | | DateTime maxTime = txndate.AddDays(overage.OVERAGE); |
| | | item.effective_time = minTime.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | item.expiration_time = maxTime.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = $"未查询到物料存放时间配置信息,条形码:{item.bc_entried}"; |
| | | return result; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | try |
| | | { |
| | | Location endLoc = LocationHelper.GetLoc(model.endLoc); |
| | | if (endLoc.N_CURRENT_NUM == 0) |
| | | if (endLoc.N_CURRENT_NUM == 0) |
| | | { |
| | | for (int i = 0; i < endLoc.N_CAPACITY; i++) |
| | | int taskNum = 0; |
| | | for (int i = 0; i < endLoc.N_CAPACITY; i++) |
| | | { |
| | | Location startLoc = WMSHelper.GetoutStockStartLoc(model.itemCode); |
| | | Location middleLoc = null; |
| | |
| | | string cntrCode = ""; |
| | | if (startLoc != null) |
| | | { |
| | | // 查询接驳位 |
| | | var locCodes = Settings.getAgvJBLocList(startLoc.N_ROADWAY, 2); |
| | | if (locCodes.Count > 0) |
| | | { |
| | | middleLoc = LocationHelper.GetLoc(locCodes[0]); |
| | | } |
| | | |
| | | // 查询货位容器编码 、目标容器编码 |
| | | var locCntrRels = LocationHelper.GetLocCntrRel(startLoc.S_CODE); |
| | | if (locCntrRels.Count > 0) |
| | |
| | | } |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "库内没有满足条件的物料"; |
| | | return result; |
| | | LogHelper.Info($"库内没有物料:{model.itemCode}", "WMS"); |
| | | break; |
| | | } |
| | | |
| | | |
| | | if (endLoc != null) |
| | | |
| | | var container = ContainerHelper.GetCntr(descCntrCode); |
| | | if (container != null) |
| | | { |
| | | var wmsTask = new WMSTask() |
| | | int isExistBaseTray = 2; |
| | | if (container.N_TYPE == 4) |
| | | { |
| | | S_CNTR_CODE = descCntrCode, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_TYPE = "成型机叫料出库任务", |
| | | S_OP_DEF_CODE = model.taskNo, |
| | | S_OP_DEF_NAME = "成型机叫料出库任务", |
| | | N_PRIORITY = model.priority, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | isExistBaseTray = 1; |
| | | } |
| | | |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | // 查询接驳位 |
| | | middleLoc = WMSHelper.getAgvJBLoc(startLoc.N_ROADWAY, 2, isExistBaseTray, 2); |
| | | |
| | | if (endLoc != null) |
| | | { |
| | | // 创建一段出库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | string taskType = "成型机叫料出库任务"; |
| | | if (model.taskType == 2) |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = cntrCode, |
| | | S_TYPE = wmsTask.S_TYPE + "-1", |
| | | taskType = "抽检叫料出库任务"; |
| | | } |
| | | |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | S_CNTR_CODE = descCntrCode, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = middleLoc.S_CODE, |
| | | S_END_AREA = middleLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | N_PRIORITY = 1, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_TYPE = taskType, |
| | | S_OP_DEF_CODE = model.taskNo, |
| | | S_OP_DEF_NAME = "叫料出库任务", |
| | | N_PRIORITY = model.priority, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | // 起点、接驳点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | // 创建一段出库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = cntrCode, |
| | | S_TYPE = wmsTask.S_TYPE + "-1", |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = middleLoc.S_CODE, |
| | | S_END_AREA = middleLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | // 起点、接驳点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | taskNum++; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = $"容器:{cntrCode}不存在"; |
| | | } |
| | | } |
| | | |
| | | if (taskNum < endLoc.N_CAPACITY) |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = $"库内物料不足,已生成出库任务数:{taskNum}"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "终点货位当前容量不为0,无法叫料"; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | ReturnResult result = new ReturnResult(); |
| | | try |
| | | { |
| | | if(model.itemInfo != null && model.itemInfo.Count > 0) |
| | | { |
| | | foreach (var item in model.itemInfo) |
| | | { |
| | | // 将MES的物料状态转化成WMS可识别的物料状态 |
| | | if (item.jdge == "" || item.jdge == null) |
| | | { |
| | | item.jdge = "OK"; |
| | | } |
| | | else if (item.jdge != "OK") |
| | | { |
| | | item.jdge = "HOLD"; |
| | | } |
| | | |
| | | var overage = WMSHelper.getOverage(item.bc_entried); |
| | | if (overage != null && overage.OVERAGE != 0) |
| | | { |
| | | DateTime txndate = DateTime.Parse(item.txndate); |
| | | DateTime minTime = txndate.AddHours(overage.MINHOUR); |
| | | DateTime maxTime = txndate.AddDays(overage.OVERAGE); |
| | | item.effective_time = minTime.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | item.expiration_time = maxTime.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = $"未查询到物料存放时间配置信息,条形码:{item.bc_entried}"; |
| | | return result; |
| | | } |
| | | } |
| | | } |
| | | |
| | | var container = ContainerHelper.GetCntr(model.trayCode); |
| | | if (container != null) |
| | | if (container != null) |
| | | { |
| | | Location startLoc = LocationHelper.GetLoc(model.startLoc); |
| | | Location endLoc = WMSHelper.GetInstockEndLoc(container.N_TYPE, model.startLoc, 2); |
| | | |
| | | if (endLoc != null) |
| | | var instockEndLocResult = WMSHelper.GetInstockEndLoc( 0, container.N_TYPE, 0, null, model.startLoc); |
| | | if (instockEndLocResult.endLoc != null && instockEndLocResult.agvLoc != null) |
| | | { |
| | | var endLoc = instockEndLocResult.endLoc; |
| | | string cntrCode = model.trayCode; |
| | | var locCntrRels = LocationHelper.GetLocCntr(model.startLoc); |
| | | if (locCntrRels.Count > 0) |
| | |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "没有空余的货位"; |
| | | result.ResultMsg = "立库没有空余的货位"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "WMS系统中没有该容器"; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | try |
| | | { |
| | | Location startLoc = LocationHelper.GetLoc(loc); |
| | | Location endLoc = WMSHelper.GetInstockEndLoc(0, loc, 2); |
| | | |
| | | if (endLoc != null && startLoc != null) |
| | | { |
| | | string trayCode = null; |
| | | var locCntrRels = LocationHelper.GetLocCntrRel(loc); |
| | | if (locCntrRels.Count > 0) |
| | | { |
| | | var container = ContainerHelper.GetCntr(locCntrRels[0].S_CNTR_CODE); |
| | | if (container.N_TYPE == 0) |
| | | { |
| | | trayCode = container.S_CODE; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | trayCode = ContainerHelper.GenerateCntrNo(); |
| | | ContainerHelper.AddCntr(trayCode, 0); |
| | | } |
| | | |
| | | if (trayCode != null) |
| | | { |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | S_CNTR_CODE = trayCode, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_TYPE = "母拖入库任务", |
| | | S_OP_DEF_CODE = taskNo, |
| | | S_OP_DEF_NAME = "母拖入库任务", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | // 创建一段入库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE + "-1", |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | // 起点、接驳点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | if (startLoc == null) |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "没有空余的货位"; |
| | | result.ResultMsg = "开始货位不存在!"; |
| | | return result; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "WMS内部错误,请联系开发人员排查"; |
| | | LogHelper.Info($"WMS内部错误,错误原因:{ex.Message}", "WMS"); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 6.1.母拖入库任务 |
| | | /// </summary> |
| | | /// <param name="loc"></param> |
| | | /// <param name="wmsTaskNo"></param> |
| | | /// <returns></returns> |
| | | public static ReturnResult autoBaseTrayInStock(string loc, string wmsTaskNo) |
| | | { |
| | | ReturnResult result = new ReturnResult(); |
| | | try |
| | | { |
| | | var cst = WCSHelper.GetTaskByStart(loc); |
| | | if (cst == null) |
| | | if (cst == null) |
| | | { |
| | | Location startLoc = LocationHelper.GetLoc(loc); |
| | | Location endLoc = null; |
| | | var baseTrayBufferLoc = Settings.baseTrayBufferLocList.Where(a => a.bufferOutLoc == loc).FirstOrDefault(); |
| | | if (baseTrayBufferLoc != null) |
| | | var instockEndLocResult = WMSHelper.GetInstockEndLoc(0, 0, 0, null, loc); |
| | | if (instockEndLocResult.endLoc != null && instockEndLocResult.agvLoc != null) |
| | | { |
| | | endLoc = LocationHelper.GetLoc(baseTrayBufferLoc.bufferInLoc); |
| | | } |
| | | if (endLoc == null || endLoc.N_CURRENT_NUM > 0) |
| | | { |
| | | endLoc = WMSHelper.GetInstockEndLoc(0, loc, 2); |
| | | } |
| | | |
| | | if (endLoc != null && startLoc != null) |
| | | { |
| | | var endLoc = instockEndLocResult.endLoc; |
| | | string trayCode = null; |
| | | var locCntrRels = LocationHelper.GetLocCntrRel(loc); |
| | | if (locCntrRels.Count > 0) |
| | |
| | | |
| | | if (trayCode != null) |
| | | { |
| | | // 创建一段入库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | S_OP_CODE = wmsTaskNo, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = trayCode, |
| | | S_TYPE = "母拖入库任务", |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | S_TYPE = "母拖入库任务", |
| | | S_OP_DEF_CODE = taskNo, |
| | | S_OP_DEF_NAME = "母拖入库任务", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | // 起点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | // 创建一段入库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE + "-1", |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | // 起点、接驳点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | result.ResultMsg = "没有空余的货位"; |
| | | } |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | /// <param name="loc"></param> |
| | | /// <param name="taskNo"></param> |
| | | /// <returns></returns> |
| | | public static ReturnResult baseTrayOutStock(string loc ,string taskNo ,int exclude = 1) |
| | | public static ReturnResult baseTrayOutStock(string loc ,string taskNo) |
| | | { |
| | | LogHelper.Info("【母拖出库任务】开始下发母拖出库任务", "WMS"); |
| | | ReturnResult result = new ReturnResult(); |
| | | try |
| | | { |
| | | Location startLoc = WMSHelper.GetEmptyTrayStartLoc(0, exclude); |
| | | Location endLoc = LocationHelper.GetLoc(loc); |
| | | var agvJBLoc = Settings.getAgvJBLoc(loc); |
| | | |
| | | if (startLoc != null) |
| | | { |
| | | string trayCode = null; |
| | | var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); |
| | | if (locCntrRels.Count == 1) |
| | | { |
| | | trayCode = locCntrRels[0].S_CNTR_CODE; |
| | | } |
| | | if (trayCode != null) |
| | | { |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | S_CNTR_CODE = trayCode, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_TYPE = "母拖出库任务", |
| | | S_OP_DEF_CODE = taskNo, |
| | | S_OP_DEF_NAME = "母拖出库任务", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | // 创建一段入库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE + "-1", |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | // 起点、接驳点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "没有空余的母拖"; |
| | | LogHelper.Info("【母拖出库任务】库内没有空余的母拖", "WMS"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "WMS内部错误,请联系开发人员排查"; |
| | | LogHelper.Info($"WMS内部错误,错误原因:{ex.Message}", "WMS"); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 7.1.母拖出库任务(AGV) |
| | | /// </summary> |
| | | /// <param name="loc"></param> |
| | | /// <param name="wmsTaskNo"></param> |
| | | /// <returns></returns> |
| | | public static ReturnResult autoBaseTrayOutStock(string loc, string wmsTaskNo) |
| | | { |
| | | ReturnResult result = new ReturnResult(); |
| | | try |
| | | { |
| | | var cst = WCSHelper.GetTaskByEnd(loc); |
| | | if (cst == null) |
| | | if (cst == null) |
| | | { |
| | | Location startLoc = WMSHelper.GetEmptyTrayStartLoc(0, 0); |
| | | Location startLoc = WMSHelper.GetEmptyTrayStartLoc(0); |
| | | Location endLoc = LocationHelper.GetLoc(loc); |
| | | |
| | | if (startLoc != null) |
| | | { |
| | | string trayCode = null; |
| | |
| | | { |
| | | trayCode = locCntrRels[0].S_CNTR_CODE; |
| | | } |
| | | |
| | | if (trayCode != null) |
| | | { |
| | | // 创建入库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | S_OP_CODE = wmsTaskNo, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = trayCode, |
| | | S_TYPE = "母拖出库任务", |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | S_TYPE = "母拖出库任务", |
| | | S_OP_DEF_CODE = taskNo, |
| | | S_OP_DEF_NAME = "母拖出库任务", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | // 起点、接驳点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | // 创建一段入库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE + "-1", |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | // 起点、接驳点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "没有空余的母拖"; |
| | | LogHelper.Info("【母拖出库任务】库内没有空余的母拖", "WMS"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 读码反馈 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public static ReturnResult readCodeFeedback(ReadCodeFeedbackModel model) |
| | | { |
| | | ReturnResult responseResult = new ReturnResult(); |
| | | var locCntrRels = LocationHelper.GetLocCntr(model.locCode); |
| | | if (locCntrRels.Count > 0) |
| | | { |
| | | foreach (var locCntr in locCntrRels) |
| | | { |
| | | var container = ContainerHelper.GetCntr(locCntr.S_CNTR_CODE); |
| | | if (container != null && container.N_TYPE != 0) |
| | | { |
| | | var mst = WMSHelper.GetWmsTaskByCntr(locCntr.S_CNTR_CODE); |
| | | if (mst != null) |
| | | { |
| | | int actType = 1; |
| | | if (locCntr.S_CNTR_CODE == model.trayCode) |
| | | { |
| | | if (mst.S_END_LOC == "虚拟货位") |
| | | { |
| | | // 获取入库终点 |
| | | var endLoc = WMSHelper.GetInstockEndLoc(container.N_TYPE, model.locCode, 1); |
| | | if (endLoc != null) |
| | | { |
| | | mst.S_END_LOC = endLoc.S_CODE; |
| | | mst.S_END_AREA = endLoc.S_AREA_CODE; |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("【WCS读码反馈】,没有获取到终点货位,可能立库没有空余货位", "WMS"); |
| | | responseResult.ResultCode = 1; |
| | | responseResult.ResultMsg = "没有获取到终点货位,可能立库没有空余货位"; |
| | | return responseResult; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"【WCS读码反馈】,托盘码匹配失败,反馈托盘码:{model.trayCode} ,货位{model.locCode}托盘码:{locCntr.S_CNTR_CODE}", "WMS"); |
| | | // 获取入库终点 |
| | | var endLoc = WMSHelper.getErrorBufferAreaLoc(); |
| | | if (endLoc != null) |
| | | { |
| | | actType = 2; |
| | | LocationHelper.UnLockLoc(mst.S_END_LOC); |
| | | mst.S_END_LOC = endLoc.S_CODE; |
| | | mst.S_END_AREA = endLoc.S_AREA_CODE; |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("【WCS读码反馈】,没有获取到缓存货位", "WMS"); |
| | | responseResult.ResultCode = 1; |
| | | responseResult.ResultMsg = "没有获取到缓存货位"; |
| | | return responseResult; |
| | | } |
| | | } |
| | | |
| | | // 创建下个任务 |
| | | if (mst.S_END_LOC != "虚拟货位") |
| | | { |
| | | WMSHelper.UpdateTaskEnd(mst); |
| | | WCSCore.createLastTask(model.locCode, mst, actType); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"【WCS读码反馈】,容器:{model.trayCode}没有查询到执行中任务", "WMS"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return responseResult; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 同步物料信息 |
| | | /// </summary> |
| | | /// <param name="matls"></param> |
| | |
| | | { |
| | | ItemBarcodeInfo itemBarcodeInfo = new ItemBarcodeInfo() |
| | | { |
| | | N_RECID = matl.recid, |
| | | S_ITEM = matl.item, |
| | | S_BC_ENTRIED = matl.bc_entried, |
| | | S_BC_ENTRIED = matl.barcode, |
| | | S_TOOLING_CODE = matl.toolineCode, |
| | | S_MCN = matl.mcn, |
| | | S_OPR = matl.opr, |
| | | TXNDATE = DateTime.Parse(matl.txndate, enGB) , |
| | | S_SHIFT = matl.shift, |
| | | N_QTY = matl.qty, |
| | | N_STOCK = matl.stock, |
| | | S_LOKASI = matl.lokasi, |
| | | S_SARANA = matl.sarana, |
| | | BOM1 = matl.bom1, |
| | | BOM2 = matl.bom2, |
| | | BOM3 = matl.bom3, |
| | | S_FOVRAGE = matl.fovrage, |
| | | S_JDGE = matl.jdge, |
| | | LAST_MODIFY_TIME = matl.last_modify_time |
| | | N_OVERAGE = matl.overagv, |
| | | N_MINHOUR = matl.minhour, |
| | | N_PRODUCT_TYPE_CODE = matl.productTypeCode, |
| | | LAST_MODIFY_TIME = matl.last_modify_time, |
| | | }; |
| | | itemBarcodeInfos.Add(itemBarcodeInfo); |
| | | } |
| | |
| | | if (!bo) |
| | | { |
| | | responseResult.ResultCode = 1; |
| | | responseResult.ResultMsg = "同步物料条码信息失败"; |
| | | responseResult.ResultMsg = "同步GT条码物料信息失败"; |
| | | } |
| | | return responseResult; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 同步物料状态信息 |
| | | /// 同步条码状态信息 |
| | | /// </summary> |
| | | /// <param name="updateMatlStatuses"></param> |
| | | /// <returns></returns> |
| | | public static ReturnResult synUpdateMatlStatus(List<UpdateMatlStatus> updateMatlStatuses) |
| | | public static ReturnResult synBarcodeStatus(List<UpdateMatlStatus> updateMatlStatuses) |
| | | { |
| | | ReturnResult responseResult = new ReturnResult(); |
| | | var bo = WMSHelper.batchUpdateItemStatus(updateMatlStatuses); |
| | | if (!bo) |
| | | List<IwmsSemiBldBcstatus> list = new List<IwmsSemiBldBcstatus> (); |
| | | if (updateMatlStatuses.Count > 0) |
| | | { |
| | | responseResult.ResultCode = 1; |
| | | responseResult.ResultMsg = "同步物料状态信息失败"; |
| | | } |
| | | return responseResult; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 同步更新物料存放时间配置信息 |
| | | /// </summary> |
| | | /// <param name="overages"></param> |
| | | /// <returns></returns> |
| | | public static ReturnResult synUpdateMatlTimeConfig(List<MatlOverage> overages) |
| | | { |
| | | ReturnResult responseResult = new ReturnResult(); |
| | | if (overages != null && overages.Count > 0) |
| | | { |
| | | List<Overage> overageList = new List<Overage>(); |
| | | foreach (var item in overages) |
| | | foreach (var item in updateMatlStatuses) |
| | | { |
| | | Overage overage = new Overage |
| | | IwmsSemiBldBcstatus bCstatus = new IwmsSemiBldBcstatus() |
| | | { |
| | | MCNGRP = item.mcngrp, |
| | | ITEMPATT = item.itempatt, |
| | | OVERAGE = item.overage, |
| | | MINHOUR = float.Parse(item.minhour.ToString()), |
| | | FLAG_STS = item.flag_sts, |
| | | RECID = item.recid, |
| | | N_RECID = item.recid, |
| | | S_BC_ENTRIED = item.barcode, |
| | | S_MCNGRP = item.mcngrp, |
| | | S_JDGE = item.jdge, |
| | | LAST_MODIFY_TIME = item.last_modify_time |
| | | }; |
| | | overageList.Add(overage); |
| | | list.Add(bCstatus); |
| | | } |
| | | var bo = WMSHelper.batchUpdateMatlTimeConfig(overageList); |
| | | |
| | | var bo = WMSHelper.synBarcodeStatus(list); |
| | | if (!bo) |
| | | { |
| | | responseResult.ResultCode = 1; |
| | | responseResult.ResultMsg = "同步物料状态信息失败"; |
| | | responseResult.ResultMsg = "同步条码状态信息失败"; |
| | | } |
| | | } |
| | | return responseResult; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 记录数据同步时间 |
| | | /// 同步条码状态信息 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <param name="updateMatlStatuses"></param> |
| | | /// <returns></returns> |
| | | public static ReturnResult recordDataSynTime(RecordDataSynTimeModel model) |
| | | public static ReturnResult synSampleStatus(List<UpdateMatlStatus> updateMatlStatuses) |
| | | { |
| | | ReturnResult responseResult = new ReturnResult(); |
| | | SynDataTimeRecord record = new SynDataTimeRecord() |
| | | List<IwmsSemiBldBcsample> list = new List<IwmsSemiBldBcsample>(); |
| | | if (updateMatlStatuses.Count > 0) |
| | | { |
| | | S_SYN_TIME = model.sysTime, |
| | | N_SYN_NUM = model.synNum, |
| | | RECORD_TABLE = model.recordTable |
| | | }; |
| | | var bo = WMSHelper.addSynDataTimeReord(record); |
| | | if (!bo) |
| | | { |
| | | responseResult.ResultCode = 1; |
| | | responseResult.ResultMsg = "记录数据同步时间失败"; |
| | | foreach (var item in updateMatlStatuses) |
| | | { |
| | | IwmsSemiBldBcsample bCstatus = new IwmsSemiBldBcsample() |
| | | { |
| | | N_RECID= item.recid, |
| | | S_BC_ENTRIED = item.barcode, |
| | | S_MCNGRP = item.mcngrp, |
| | | S_JDGE = item.jdge, |
| | | LAST_MODIFY_TIME = item.last_modify_time |
| | | }; |
| | | list.Add(bCstatus); |
| | | } |
| | | |
| | | var bo = WMSHelper.synSamplingStatus(list); |
| | | if (!bo) |
| | | { |
| | | responseResult.ResultCode = 1; |
| | | responseResult.ResultMsg = "同步条码状态信息失败"; |
| | | } |
| | | } |
| | | return responseResult; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 查询上一次的数据同步时间 |
| | | /// </summary> |
| | | /// <param name="recordTable"></param> |
| | | /// <param name="tableType"></param> |
| | | /// <returns></returns> |
| | | public static ReturnResult findLastDataSynTime(string recordTable) |
| | | public static ReturnResult findDataLastSynTime(int tableType) |
| | | { |
| | | ReturnResult responseResult = new ReturnResult(); |
| | | var synDataTime = WMSHelper.getLastDataSynTime(recordTable); |
| | | if (synDataTime != null) |
| | | { |
| | | Dictionary<string, string> map = new Dictionary<string, string>(); |
| | | map.Add("S_SYN_TIME", synDataTime.S_SYN_TIME); |
| | | map.Add("RECORD_TABLE", synDataTime.RECORD_TABLE); |
| | | responseResult.data = map; |
| | | } |
| | | var synDataTime = WMSHelper.getDataLastSynTime(tableType); |
| | | responseResult.data = synDataTime; |
| | | return responseResult; |
| | | } |
| | | |
| | |
| | | public class CreateOutOrderModel |
| | | { |
| | | public string taskNo { get; set; } // 任务号 |
| | | public string trayCode { get; set; } // 任务号 |
| | | public string trayCode { get; set; } // 托盘号 |
| | | public string itemCode { get; set; } // 物料编码 |
| | | public string endLoc { get; set; } // 终点货位 |
| | | public int priority { get; set; } = 0; // 优先级 默认0 |
| | | public int taskType { get; set; } = 1; // 1.成型机叫料任务 2.抽检出库任务 |
| | | } |
| | | |
| | | public class EmptyTrayOutOrderModel |
| | |
| | | { |
| | | public string taskNo { get; set; } // 任务号 |
| | | public string startLoc { get; set; } // 起点货位 |
| | | public string taskType { get; set; } // 任务类型 入库回库类型,1:机台半制品入库,2:成型机余料回库,3:成型机空托回库 |
| | | public string taskType { get; set; } // 任务类型 入库回库类型,1:机台半制品入库,2:成型机余料入库,3:成型机空托入库,4:半制品抽检入库 |
| | | public string trayCode { get; set; } // 托盘号 |
| | | public int priority { get; set; } = 0;// 优先级 默认传0 |
| | | public List<GTItemInfo> itemInfo { get; set; } |
| | |
| | | { |
| | | public string item { get; set; } // 物品代码 |
| | | public string bc_entried { get; set; } // 条形码编号 |
| | | public string toolineCode { get; set; } // 工装条码 |
| | | public string mcn { get; set; } // 机器代码编号 |
| | | public string opr { get; set; } // 操作员 |
| | | public string txndate { get; set; } // 生产时间 |
| | | public string shift { get; set; } // 工作班次 |
| | | public int qty { get; set; } // 产品数量 |
| | | public string sarana { get; set; } // 产品材料的托盘/盒/推车/货车ID |
| | | public string fovrage { get; set; } // 是否过期的状态 Y=过期,N=未过期 |
| | | public string jdge { get; set; } // 质量状态 OK=产品合格,NG=产品不合格,HLM=产品待定 |
| | | public string effective_time { get; set; } // 生效时间 (yyyy-MM-dd HH:mm:ss) |
| | | public string expiration_time { get; set; } // 失效时间 (yyyy-MM-dd HH:mm:ss) |
| | | public string jdge { get; set; } // 质量状态 OK=产品合格,HOLD = 产品待定 |
| | | public int overage { get; set; } // 生效时间 (yyyy-MM-dd HH:mm:ss) |
| | | public int minhour { get; set; } // 失效时间 (yyyy-MM-dd HH:mm:ss) |
| | | public int productTypeCode { get; set; } // 失效时间 (yyyy-MM-dd HH:mm:ss) |
| | | } |
| | | |
| | | |