using HH.WMS.BLL.InStock; using HH.WMS.Common; using HH.WMS.Common.External; using HH.WMS.Common.Response; using HH.WMS.Entitys.External; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using HH.WMS.BLL.SysMgr; using HH.WMS.Entitys; using HH.WMS.Entitys.Basic; namespace HH.WMS.BLL.External { /// /// 处理接口参数 /// public static class ParameterHandleBLL { private static string _className = "HH.BWMS.BLL.External.ParameterHandle"; #region 入作业区接口参数处理 + HandleInWorkArea /// /// 入作业区接口参数处理 /// /// /// public static ExecuteInWorkAreaPara HandleInWorkArea(ExecuteInWorkAreaPara executeInWorkAreaPara) { _className += ".HandleInWorkArea"; //任务号 考虑是否重复? if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.taskNo)) { var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_InTaskNo + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}"; executeInWorkAreaPara.InWorkAreaEntity.taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); ; if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.taskNo)) executeInWorkAreaPara.BasisResponse = BasisResponse.Error("获取AUTOBOM任务号异常,请检查是否维护生成规则!", _className); } //托盘码 if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.trayCode)) { //转运并且不传托盘号,默认从货位中获取 if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == "Y") { //查找托盘号和物料编码 and by liuying var lstObj = BLLCreator.Create().GetListByLocationCode(executeInWorkAreaPara.InWorkAreaEntity.startBit); if (lstObj.Count > 0) { //去除已经在任务中的托盘,支持吉利项目、小木耳项目 var strTray = string.Join("','", lstObj.Select(o => o.CN_S_TRAY_CODE).ToList()); var lstTasks = BLLCreator.Create().GetTask(" AND CN_S_TRAY_CODE in ('" + strTray + "') AND (CN_S_STATE = '未执行' or CN_S_STATE = '执行中')"); var lstInTaskTray = lstTasks.Select(o => o.CN_S_TRAY_CODE).ToList(); lstObj.RemoveAll(o => lstInTaskTray.Contains(o.CN_S_TRAY_CODE)); if (lstObj.Count > 0) { executeInWorkAreaPara.InWorkAreaEntity.trayCode = lstObj[0].CN_S_TRAY_CODE; var itemEntity = new ChaoYangItemDataEntity(); executeInWorkAreaPara.InWorkAreaEntity.data = new List(); //根据托盘号查询托盘产品关联信息主表 var trayItemMst = BLLCreator.Create().GetTrayItemMst(" AND CN_S_TRAY_CODE ='" + lstObj[0].CN_S_TRAY_CODE + "'"); //List lstItem = BLLCreator.Create().GetItemRelModel(" WHERE CN_S_TRAY_CODE ='" + lstObj[0].CN_S_TRAY_CODE + "'"); if (trayItemMst.Count > 0) { //查询托盘产品关联信息子表 var trayItemDtl = BLLCreator.Create().GetTrayItemDtl(" AND CN_PARENT_GUID='" + trayItemMst[0].CN_GUID + "'"); itemEntity.itemCode = trayItemMst[0].CN_S_ITEM_CODE; itemEntity.itemName = trayItemMst[0].CN_S_ITEM_NAME; itemEntity.itemPackUnit = trayItemDtl[0].CN_S_PACKING_UNIT; itemEntity.qty = (decimal)(trayItemMst[0].CN_F_QUANTITY == null ? 0 : trayItemMst[0].CN_F_QUANTITY); itemEntity.lotNo = trayItemMst[0].CN_S_PRODUCTION_BATCH; itemEntity.itemState = trayItemMst[0].CN_S_ITEM_STATE; itemEntity.productionDate = trayItemDtl[0].CN_T_PRODUCTION; itemEntity.uniqueCode = trayItemDtl[0].CN_S_UNIQUE_CODE; itemEntity.itemWeight = trayItemDtl[0].CN_S_SERIAL_NO; itemEntity.itemModel = trayItemMst[0].CN_S_MODEL; executeInWorkAreaPara.InWorkAreaEntity.data.Add(itemEntity); } } else { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("该货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "中的托盘都已在任务中,不允许重复下达", _className); } } else { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "没有绑定托盘", _className); return executeInWorkAreaPara; } } else { //生成虚拟托盘 var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}"; executeInWorkAreaPara.InWorkAreaEntity.trayCode = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); } } //处理物料编码 if (executeInWorkAreaPara.InWorkAreaEntity.data != null) { foreach (var itemData in executeInWorkAreaPara.InWorkAreaEntity.data) { var item = BLLCreator.Create().GetItem(itemData.itemCode); //BLLCreator.Create>().GetSingleEntity(new { CN_S_ITEM_CODE = itemData.itemCode }); if (item != null) { itemData.itemPackUnit = item.CN_S_PACK_UNIT; itemData.itemName = item.CN_S_ITEM_NAME; } else { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("物料" + itemData.itemCode + "在AutoBom中没有维护", _className); return executeInWorkAreaPara; } } } return executeInWorkAreaPara; } #endregion #region 出作业区接口参数处理 + HandleOutWorkArea /// /// 出作业区接口参数处理 /// /// /// public static ExecuteOutWorkAreaPara HandleOutWorkArea(ExecuteOutWorkAreaPara executeOutWorkAreaPara) { //任务号 if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.taskNo)) { var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_OutTaskNo + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}"; executeOutWorkAreaPara.OutWorkAreaEntity.taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.taskNo)) executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("获取AUTOBOM任务号异常!", _className); } //获取作业区列表 executeOutWorkAreaPara.WorkAreaProEntitys = BLLCreator.Create().GetOutWorkPosition(executeOutWorkAreaPara); if (!executeOutWorkAreaPara.WorkAreaProEntitys.Any()) { executeOutWorkAreaPara.BasisResponse = BasisResponse.Error(string.Format("未获取到当前库区:{0}货位:{1}下的作业路径!", executeOutWorkAreaPara.OutWorkAreaEntity.endArea, executeOutWorkAreaPara.OutWorkAreaEntity.endBit), _className); return executeOutWorkAreaPara; } return executeOutWorkAreaPara; } #endregion /// /// 出作业区接口返回结果 /// /// /// /// public static OkTask HandleOutWorkAreaResponse(TN_WM_TRANSPORT_TASKEntity trans, int index) { if (trans.CN_S_START_AREA_TYPE == Constants.Area_Struc_LiuLiStock || trans.CN_S_START_AREA_TYPE == Constants.Area_Struc_DuiDieStock) { trans.CN_S_START_BIT += "_" + trans.CN_S_QTY_INDEX; } var okTask = new OkTask() { index = index, taskNo = trans.CN_S_TASK_NO, startStock = trans.CN_S_STOCK_CODE, startArea = trans.CN_S_START_AREA, startBit = trans.CN_S_START_BIT, endStock = trans.CN_S_STOCK_CODE, endArea = trans.CN_S_END_AREA, endBit = trans.CN_S_END_BIT, priority = trans.CN_N_PRIORITY, trayCode = trans.CN_S_CIR_OBJ_CODE }; return okTask; } } }