| | |
| | | EndLocGroup endLocGroup = null; |
| | | if (barcodeList.Count > 0) |
| | | { |
| | | endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count); |
| | | string itemCode = null; |
| | | var cntrItemRels = ContainerHelper.GetCntrItemRel(barcodeList[0].rfid); |
| | | if (cntrItemRels.Count > 0) |
| | | { |
| | | itemCode = cntrItemRels[0].S_ITEM_CODE; |
| | | } |
| | | endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count, itemCode); |
| | | } |
| | | |
| | | foreach (var ext in extData) |
| | |
| | | { |
| | | ResponseResult response = new ResponseResult(); |
| | | |
| | | //参数校验 |
| | | if (model.locCodes.Count == 0) |
| | | int locNum = model.locCodes.Count; |
| | | if (locNum > 0) |
| | | { |
| | | string msg = $"硫化机:{model.mcn}呼叫胚胎出库,参数校验失败,缺少货位信息"; |
| | | LogHelper.Info(msg, "WMS"); |
| | | response.code = 1; |
| | | response.msg = msg; |
| | | return response; |
| | | } |
| | | |
| | | // 1.一个硫化机工位只能同时存在一个正在执行中的任务 |
| | | WCSTask existTask = WCSHelper.GetTaskByEqNo(model.mcn); |
| | | if (existTask == null) |
| | | { |
| | | // 2.根据当前时间,判断班次日期和班次 |
| | | var currentTime = DateTime.Now; |
| | | var shift = getShift(currentTime.TimeOfDay); |
| | | var dateShift = DateTime.Now.ToString("dd/MM/yyyy"); |
| | | TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00 |
| | | if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start) |
| | | Location prevLoc = null; |
| | | Dictionary<string,Location> outLocDic = new Dictionary<string,Location>(); |
| | | foreach (var mcn in model.locCodes) |
| | | { |
| | | dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy"); |
| | | // 1.一个硫化机工位只能同时存在一个正在执行中的任务 |
| | | var existTask = WCSHelper.GetTaskByEnd(mcn); |
| | | if (existTask.Count == 0) |
| | | { |
| | | // 2.根据当前时间,判断班次日期和班次 |
| | | var currentTime = DateTime.Now; |
| | | var shift = getShift(currentTime.TimeOfDay); // 班次 |
| | | var dateShift = currentTime.ToString("dd/MM/yyyy"); |
| | | TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00 |
| | | if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start) |
| | | { |
| | | dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy"); |
| | | } |
| | | |
| | | // 3.根据班次日期+班次+硫化机工位号查询 硫化机工单 中的物料编码、预计生产数量 |
| | | var productionShedule = WMSHelper.getProductionShedule(dateShift, mcn, shift); |
| | | |
| | | if (productionShedule != null && productionShedule.QTY != 0) |
| | | { |
| | | // 4查询【胚胎已完成的条码中间表】并计算当前班次的已完成数量 |
| | | int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, mcn, shift); |
| | | if (productionShedule.QTY > finishNum) |
| | | { |
| | | // 5.出库策略 1.优先查询前一拖货位的左右两边是否满足条件 2.计算(1.巷道不报警、2.物料状态OK、3.小于失效时间 大于等于生效时间 4.加急料先出、5.先入先出(生产时间))出库物料,生成任务 |
| | | var startLoc = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE, prevLoc); |
| | | if (startLoc != null) |
| | | { |
| | | outLocDic.Add(mcn, startLoc); |
| | | prevLoc = startLoc; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 3.根据班次日期+班次+硫化机工位号查询呼叫的物料编码、预计生产数量 |
| | | var productionShedule = WMSHelper.getProductionShedule(dateShift, model.mcn, shift); |
| | | if (productionShedule != null && productionShedule.QTY != 0) |
| | | // 6.判断出库货位是否是同一巷道,同一巷道生成任务组号 |
| | | string groupNo = null; |
| | | if (outLocDic.Count > 1) |
| | | { |
| | | // 4.查询【胚胎已完成的条码中间表】并计算当前班次的已完成数量 |
| | | int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, model.mcn, shift); |
| | | |
| | | if (productionShedule.QTY > finishNum) |
| | | var groupNum = outLocDic.Select(a => a.Value).ToList().GroupBy(a => a.N_ROADWAY).Count(); |
| | | if (groupNum == 1) |
| | | { |
| | | // 5.计算(1.巷道不报警、2.物料状态OK、3.小于失效时间 大于等于生效时间 4.加急料先出、5.先入先出(生产时间))出库物料,生成任务 |
| | | int locNum = model.locCodes.Count; |
| | | var startLocData = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE,locNum); |
| | | if (startLocData.startLocList != null && startLocData.startLocList.Count == locNum) |
| | | groupNo = GenerateTaskGroupNo(); |
| | | } |
| | | } |
| | | |
| | | // 7.生成出库任务 |
| | | if (outLocDic.Count > 0) |
| | | { |
| | | foreach (var item in outLocDic) |
| | | { |
| | | Location endLoc = LocationHelper.GetLoc(item.Key); |
| | | Location startLoc = item.Value; |
| | | if (endLoc != null) |
| | | { |
| | | var startLocList = startLocData.startLocList; |
| | | for (int i = 0; i < locNum; i++) |
| | | var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); |
| | | if (locCntrRels != null && locCntrRels.Count > 0) |
| | | { |
| | | Location startLoc = startLocList[i]; |
| | | Location endLoc = LocationHelper.GetLoc(model.locCodes[i]); |
| | | if (endLoc != null) |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); |
| | | if (locCntrRels != null && locCntrRels.Count > 0) |
| | | S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE, |
| | | 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.reqId, |
| | | S_OP_DEF_NAME = "成型机满料下线入库", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | S_GROUP_NO = groupNo, |
| | | }; |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | // 创建一段入库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | { |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE, |
| | | 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.reqId, |
| | | S_OP_DEF_NAME = "成型机满料下线入库", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | S_GROUP_NO = startLocData.groupNo, |
| | | }; |
| | | 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, |
| | | 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, |
| | | }; |
| | | 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, |
| | | 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); |
| | | 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); |
| | | } |
| | | } |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | string msg = $"库内没有满足条件的物料"; |
| | | LogHelper.Info(msg, "WMS"); |
| | | response.code = 1; |
| | | response.msg = msg; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | string msg = $"硫化机:{model.mcn}的当前班次任务已完成,停止叫料"; |
| | | LogHelper.Info(msg, "WMS"); |
| | | response.code = 1; |
| | | response.msg = msg; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | string msg = $"硫化机:{model.mcn}的存在正在执行中的任务,请勿重复叫料"; |
| | | LogHelper.Info(msg, "WMS"); |
| | | response.code = 1; |
| | | response.msg = msg; |
| | | } |
| | | return response; |
| | | } |
| | |
| | | { |
| | | ResponseResult response = new ResponseResult(); |
| | | Location startLoc = LocationHelper.GetLoc(model.startLoc); |
| | | var endLocGroup = WMSHelper.getInStockEndLoc(1); |
| | | var endLocGroup = WMSHelper.getInStockEndLoc(1,null); |
| | | if (endLocGroup.endLocList.Count == 1) |
| | | { |
| | | Location endLoc = endLocGroup.endLocList[0]; |
| | |
| | | public static ResponseResult callEmptyTrayOutStock(CallEmptyTrayOutStockModel model) |
| | | { |
| | | ResponseResult responseResult = new ResponseResult(); |
| | | Location endLoc = LocationHelper.GetLoc(model.endLoc); |
| | | var startLocData = WMSHelper.getOutStockStartLoc(null, 1); |
| | | if (startLocData.startLocList != null && startLocData.startLocList.Count == 1) |
| | | Location startLoc = WMSHelper.getOutStockStartLoc(null); |
| | | if (startLoc != null) |
| | | { |
| | | Location startLoc = startLocData.startLocList[0]; |
| | | Location endLoc = LocationHelper.GetLoc(model.endLoc); |
| | | if (endLoc != null) |
| | | { |
| | | var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); |
| | |
| | | S_OP_DEF_CODE = model.reqId, |
| | | S_OP_DEF_NAME = "呼叫空托出库", |
| | | N_PRIORITY = 1, |
| | | T_START_TIME = DateTime.Now, |
| | | S_GROUP_NO = startLocData.groupNo, |
| | | T_START_TIME = DateTime.Now |
| | | }; |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | responseResult.code = 1; |
| | | responseResult.msg = $"终点货位:{model.endLoc}在WMS系统中不存在"; |
| | | } |
| | | } |
| | | else |
| | | else |
| | | { |
| | | string msg = $"库内没有满足条件的物料"; |
| | | LogHelper.Info(msg, "WMS"); |
| | | responseResult.code = 1; |
| | | responseResult.msg = msg; |
| | | responseResult.msg = "库内空托不足"; |
| | | } |
| | | return responseResult; |
| | | } |