using HH.Redis.ReisModel; using HH.WMS.BLL; using HH.WMS.BLL.Algorithm; using HH.WMS.BLL.AllQuery; using HH.WMS.BLL.Basic; using HH.WMS.BLL.Check; using HH.WMS.BLL.Common; using HH.WMS.BLL.External; using HH.WMS.BLL.InStock; using HH.WMS.BLL.OutStock; using HH.WMS.BLL.Pda; using HH.WMS.BLL.SysMgr; using HH.WMS.Common; using HH.WMS.Common.Algorithm; using HH.WMS.Common.External; using HH.WMS.DAL; using HH.WMS.DAL.Basic; using HH.WMS.DAL.InStock; using HH.WMS.DAL.Pda; using HH.WMS.Entitys; using HH.WMS.Entitys.Ams; using HH.WMS.Entitys.Basic; using HH.WMS.Entitys.Check; using HH.WMS.Entitys.Common; using HH.WMS.Entitys.Entitys; using HH.WMS.Entitys.Func; using HH.WMS.WebApi.Areas.Common.Controllers; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace HH.WMS.WebApi.Areas.Pda.Controllers { /// /// 宇寿PDA接口 /// public class YuShouApiController : BaseController { /// /// 根据作业区类型获取库区列表 /// /// 作业区类型 /// [HttpGet] public string GetAreaByAreaClass(string areaClass) { try { return ValidateToken(x => { if (string.IsNullOrEmpty(areaClass)) { return JsonConvert.SerializeObject(OperateResult.Error("请提供作业区类型!")); } List areaModel = BLLCreator.Create().GetAreaByAreaClassYS(areaClass); return JsonConvert.SerializeObject(OperateResult.Succeed("", areaModel)); }); } catch (Exception ex) { return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } /// /// 通过多个作业区类型获取库区集合 /// /// /// [HttpGet] public string GetAreaByManyClass(string areasClass) { try { return ValidateToken(x => { if (string.IsNullOrEmpty(areasClass)) { return JsonConvert.SerializeObject(OperateResult.Error("请提供作业区类型!")); } List areaModel = BLLCreator.Create().GetAreaByManyClassYS(areasClass); return JsonConvert.SerializeObject(OperateResult.Succeed("", areaModel)); }); } catch (Exception ex) { return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #region 装箱保存 /// /// 装箱保存 /// /// /// /// /// [HttpGet] public IHttpActionResult BoxingSave(string boxingCode, string itemCode, string weight, string lotNo, string figureNo) { var logPara = LogType.LogPara("装箱保存"); Log.Detail(logPara, "接收参数为:boxingCode:" + boxingCode + ",itemCode" + ", weight:" + weight + ", lotNo: " + lotNo + ", figureNo:" + figureNo); //检查物料编码是否正确 var item = BLLCreator.Create().GetItem(itemCode); if (item == null) { return Json(new { Success = false, Message = "当前物料编码未在AutoBom中找到!" }); } Log.Detail(logPara, "获取物料实体:" + LogDescribe.Content(item)); var boxingInfo = BLLCreator.Create>().GetSingleEntity(new { CN_S_TRAY_TYPE = "料箱", CN_S_TRAY_CODE = boxingCode }); if (boxingInfo == null) { return Json(new { Success = false, Message = "当前料箱码不在数据库中!" }); } try { double itemWeight = Convert.ToDouble(weight) - Convert.ToDouble(boxingInfo.CN_F_GROSSWEIGHT); if (itemWeight <= 0) { return Json(new { Success = false, Message = "当前总重量必须大于料箱自重" + boxingInfo.CN_F_GROSSWEIGHT + "KG!" }); } else { weight = itemWeight.ToString(); } } catch (Exception ex) { return Json(new { Success = false, Message = "重量数据维护不正确!原因:" + ex.Message }); } //查询当前是否有该装箱码记录 var printBarCode = BLLCreator.Create().GetValue(boxingCode); //如果有,更新记录 if (printBarCode != null) { var result = BLLCreator.Create().UpdateWeight(boxingCode, weight, lotNo, figureNo, item); if (!result) { return Json(new { Success = false, Message = "更新重量失败!" }); } }//如果没有 新增 else { var printBarCodeDto = new MONGO_PRINT_BARCODE { CN_S_UNIQUE_CODE = boxingCode, CN_S_ARRIVAL_NO = "", CN_N_QGP = 0, CN_T_CREATE = DateTime.Now.AddHours(8), //CN_S_PRODUCTION_BATCH = weight, CN_S_SERIAL_NO = weight, CN_S_ITEM_CODE = item.CN_S_ITEM_CODE, CN_S_ITEM_NAME = item.CN_S_ITEM_NAME, CN_F_PACKING_QTY = 1, CN_S_MODEL = item.CN_S_MODEL, CN_S_FIGURE_NO = figureNo,//item.CN_S_FIGURE_NO, CN_S_MEASURE_UNIT = item.CN_S_MEASURE_UNIT, CN_S_LOT_NO = lotNo, CN_S_IS_USE = "Y" }; Log.Detail(logPara, "添加装箱记录实体:" + JsonConvert.SerializeObject(printBarCodeDto)); var result = BLLCreator.Create().AddPrintBarcode(new List{ printBarCodeDto }); Log.Detail(logPara, "添加装箱记录结果:" + result); } return Json(new { Success = true, Message = "保存成功!" }); } //检查料箱码是否码盘 [HttpGet] public IHttpActionResult CheckBarcodeIsExistBoxing(string uniCode) { //查询当前是否有该装箱码记录 var printBarCode = BLLCreator.Create().GetValueYS(uniCode, "Y"); if (printBarCode == null) { return Json(new { Success = false, Message = "当前唯一码未装箱!" }); } else { return Json(new { Success = true, Message = "当前唯一码已经装箱!" }); } } //检查料箱码是否码盘 [HttpGet] public OperateResult CheckBarcodeIsExistBoxingBack(string uniCode) { //查询当前是否有该装箱码记录 try { var printBarCode = BLLCreator.Create().GetValue(uniCode); return OperateResult.Succeed("", printBarCode); } catch(Exception ex) { return OperateResult.Error(ex.Message); } } #endregion #region 码盘相关接口 /// /// 检查码盘托盘是否可用 /// /// /// [HttpGet] public string CheckTrayYS(string trayCode) { try { bool result = DALCreator.Create().CheckTrayBindLoc(trayCode); //后期需要增加判断托盘是否在任务执行中 if (result) { return JsonConvert.SerializeObject(OperateResult.Error("该托盘已绑定货位")); } else { DataTable dt = BLLCreator.Create().GetTrayDetailYS(trayCode); if (dt.Rows.Count == 0) { dt = BLLCreator.Create().GetTrayInfoYS(trayCode); } if (dt.Rows.Count == 0) { return JsonConvert.SerializeObject(OperateResult.Error("该托盘号在系统中不存在")); } else { return JsonConvert.SerializeObject(OperateResult.Succeed("", dt)); } } } catch (Exception ex) { Log.Error("CheckTrayYS异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } /// /// 检查唯一码是否已经码盘 /// /// /// [HttpGet] public string CheckUniCodeYS(string uniCode) { try { List lstDTLEntity = BLLCreator.Create>().GetList(new { CN_S_UNIQUE_CODE = uniCode }); if (lstDTLEntity.Any()) { return JsonConvert.SerializeObject(OperateResult.Error("该料箱码已码盘,请勿重复码盘")); } else { return JsonConvert.SerializeObject(OperateResult.Succeed()); } } catch (Exception ex) { Log.Error("CheckUniCodeYS异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } /// /// 检查码盘货位是否可用 /// /// /// [HttpGet] public string CheckLocationYS(string locationCode) { try { OperateResult result = BLLCreator.Create().CheckLocationYS(locationCode); return JsonConvert.SerializeObject(result); } catch (Exception ex) { Log.Error("CheckLocationYS异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } /// /// 检查线边叫料货位是否可用 /// /// /// [HttpGet] public string CheckCallLocationYS(string locationCode) { try { OperateResult result = BLLCreator.Create().CheckCallLocationYS(locationCode); return JsonConvert.SerializeObject(result); } catch (Exception ex) { Log.Error("CheckLocationYS异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } /// /// 码盘保存 /// /// token验证值 /// 数据Json /// /// [HANHE(XDL)] CREATED BY 2018-11-17 [HttpPost] public string SaveUniPalletItemRelationYS(JObject jsonData) { try { ItemOnTrayEntity entity = JsonConvert.DeserializeObject(jsonData.ToString()); return ValidateToken(entity.TokenId, t => { Log.Info("SaveUniPalletItemRelationYS-SaveUniPalletItemRelationYS", "开始调用"); OperateResult oresult = BLLCreator.Create(t).SaveUniPalletItemRelationYS(entity, t); Log.Info("SaveUniPalletItemRelationYS-SaveUniPalletItemRelationYS", "结束调用"); if (oresult.Success) { if (entity.BIND_TRAY_LOCATION) { Log.Info("SaveUniPalletItemRelationYS-AddTrayLocationRelationYS", "开始调用"); oresult = BLLCreator.Create(t).AddTrayLocationRelationYS(entity.CN_S_TRAY_CODE, entity.CN_S_LOCATION_CODE, entity.IN_STOCK_TYPE, t, entity.PROJECT_CODE); Log.Info("SaveUniPalletItemRelationYS-AddTrayLocationRelationYS", "结束调用"); if (oresult.Success) { if (entity.CODE_IN_TASK == "Y") { TrayOnShelfEntity trayOnShelf = new TrayOnShelfEntity(); trayOnShelf.CN_S_DEVICE_NO = entity.CN_S_LOCATION_CODE; trayOnShelf.CN_S_END_AREA_CODE = entity.CN_S_END_AREA_CODE; trayOnShelf.CN_S_LOCATION_CODE = ""; trayOnShelf.CN_S_TASK_TYPE = entity.CN_S_TASK_TYPE; trayOnShelf.CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE; trayOnShelf.projectCode = entity.PROJECT_CODE; trayOnShelf.IN_STOCK_TYPE = entity.IN_STOCK_TYPE; Log.Info("SaveUniPalletItemRelationYS-SimZTShelfAutoYS", "开始调用"); oresult = BLLCreator.Create().SimZTShelfAutoYS(trayOnShelf, t); Log.Info("SaveUniPalletItemRelationYS-SimZTShelfAutoYS", "结束调用"); if (!oresult.Success) { oresult.Msg = "码盘成功但入库失败:" + oresult.Msg; } } } else { oresult.Msg = "码盘成功但绑定货位失败:" + oresult.Msg; } } } else { oresult.Msg = "码盘失败:" + oresult.Msg; } return JsonConvert.SerializeObject(oresult); }); } catch (Exception ex) { Log.Error("SaveUniPalletItemRelationYS异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message.ToString())); } } /// /// 退料码盘 /// /// token验证值 /// 数据Json /// /// [HANHE(XDL)] CREATED BY 2018-11-17 [HttpPost] public string SaveBackPalletItemRelationYS(JObject jsonData) { try { ItemOnTrayEntity entity = JsonConvert.DeserializeObject(jsonData.ToString()); return ValidateToken(entity.TokenId, t => { OperateResult oresult = BLLCreator.Create(t).SaveUniPalletItemRelationYS(entity, t); return JsonConvert.SerializeObject(oresult); }); } catch (Exception ex) { Log.Error("SaveUniPalletItemRelationYS异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message.ToString())); } } #endregion #region (PDA接口)托盘货位绑定 /// /// 绑定货位等同入库,增加仓库、库区库存 /// /// 托盘编码 /// 货位编码 /// /// [HANHE(XDL)] CREATED BY 2019-04-17 [HttpGet] public string AddTrayLocationRelation(string trayCode, string locationCode, string projectCode) { try { return ValidateToken(t => { OperateResult result = BLLCreator.Create(t).AddTrayLocationRelationYS(trayCode, locationCode, "", t, projectCode); return JsonConvert.SerializeObject(result); }); } catch (Exception ex) { Log.Error("AddTrayLocationRelation异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message.ToString())); } } #endregion #region (PDA接口)托盘货位解绑 /// /// 绑定货位等同出库,减少仓库、库区库存 /// /// 托盘编码 /// 货位编码 /// /// [HANHE(XDL)] CREATED BY 2019-04-17 [HttpGet] public string DeleteTrayLocationRelation(string trayCode, string locationCode, string projectCode) { try { return ValidateToken(t => { OperateResult result = BLLCreator.Create(t).DeleteTrayLocationRelationYS(trayCode, locationCode, t, projectCode); return JsonConvert.SerializeObject(result); }); } catch (Exception ex) { Log.Error("DeleteTrayLocationRelation异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message.ToString())); } } #endregion #region 入库 检查入库起点是否可用 /// /// 检查货位是否可用 /// /// /// [HttpGet] public string CheckInStockLocation(string locationCode) { try { OperateResult result = BLLCreator.Create().CheckInStockLocation(locationCode); return JsonConvert.SerializeObject(result); } catch (Exception ex) { Log.Error("CheckInStockLocation异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } /// /// 检查托盘是否可用 /// /// /// [HttpGet] public string CheckInStockTray(string trayCode) { try { OperateResult result = BLLCreator.Create().CheckInStockTray(trayCode); return JsonConvert.SerializeObject(result); } catch (Exception ex) { Log.Error("CheckInStockTray异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #endregion #region 根据料箱码获取装箱信息 /// /// 根据料箱码获取装箱信息 /// /// /// [HttpGet] public string AnalysisCodeYS(string barCode) { try { ScanCodeClass ScanCodeClass = BLLCreator.Create().AnalysisCodeYS(barCode, "Y"); if (ScanCodeClass == null) return JsonConvert.SerializeObject(OperateResult.Error("找不到该料箱码!请确认是否已装箱称重")); return JsonConvert.SerializeObject(OperateResult.Succeed("", ScanCodeClass)); } catch (Exception ex) { Log.Error("AnalysisCodeYS异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error("AnalysisCodeYS方法 Exception!" + ex.ToString())); } } /// /// 根据料箱码获取装箱信息 /// /// /// [HttpGet] public string AnalysisCodeBackYS(string barCode) { try { ScanCodeClass ScanCodeClass = BLLCreator.Create().AnalysisCodeYS(barCode, "N"); if (ScanCodeClass == null) return JsonConvert.SerializeObject(OperateResult.Error("已上料数据中不存在该料箱码!请确认是否已上料")); return JsonConvert.SerializeObject(OperateResult.Succeed("", ScanCodeClass)); } catch (Exception ex) { Log.Error("AnalysisCodeBackYS异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error("AnalysisCodeBackYS方法 Exception!" + ex.ToString())); } } #endregion #region 获取托盘中物料信息 /// /// 获取托盘中的物料信息 /// /// /// [HttpGet] public string GetBindTrayDetail(string trayCode, string locationCode, string projectCode) { try { OperateResult result = new OperateResult(); string returnJson = string.Empty; DataTable dt = new DataTable(); if (!string.IsNullOrEmpty(trayCode)) { List lstEntity = DALCreator.Create().GetListByTrayCode(trayCode); dt = BLLCreator.Create().GetTrayDetail(trayCode); if (lstEntity.Count == 0) { returnJson = JsonConvert.SerializeObject(OperateResult.Succeed("", dt)); } else { returnJson = JsonConvert.SerializeObject(OperateResult.Succeed(lstEntity[0].CN_S_LOCATION_CODE, dt)); } } if (!string.IsNullOrEmpty(locationCode)) { List lstEntity = DALCreator.Create().GetListByLocationCode(locationCode); if (lstEntity.Count == 0) { returnJson = JsonConvert.SerializeObject(OperateResult.Succeed("", dt)); } else { dt = BLLCreator.Create().GetTrayDetail(lstEntity[0].CN_S_TRAY_CODE); returnJson = JsonConvert.SerializeObject(OperateResult.Succeed(lstEntity[0].CN_S_TRAY_CODE, dt)); } } return returnJson; } catch (Exception ex) { Log.Error("GetBindTrayDetail异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #endregion #region 查询托盘中物料信息 /// /// 获取托盘中的物料信息 /// /// /// [HttpGet] public string QueryTrayDetail(string trayCode, string locationCode, string boxCode) { try { OperateResult result = new OperateResult(); string returnJson = string.Empty; DataTable dt = new DataTable(); if (!string.IsNullOrEmpty(trayCode)) { dt = BLLCreator.Create().GetTrayDetail(trayCode); returnJson = JsonConvert.SerializeObject(OperateResult.Succeed("", dt)); } if (!string.IsNullOrEmpty(locationCode)) { List lstEntity = DALCreator.Create().GetListByLocationCode(locationCode); if (lstEntity.Count == 0) { returnJson = JsonConvert.SerializeObject(OperateResult.Error("该货位没有绑定托盘!")); } else { dt = BLLCreator.Create().GetTrayDetail(lstEntity[0].CN_S_TRAY_CODE); returnJson = JsonConvert.SerializeObject(OperateResult.Succeed("", dt)); } } if (!string.IsNullOrEmpty(boxCode)) { ScanCodeClass ScanCodeClass = BLLCreator.Create().AnalysisCodeYS(boxCode, "Y"); if (ScanCodeClass == null) { returnJson = JsonConvert.SerializeObject(OperateResult.Error("找不到该料箱码!请确认是否已装箱称重")); } else { dt.Columns.Add("CN_S_ITEM_NAME", Type.GetType("System.String")); dt.Columns.Add("CN_S_ITEM_CODE", Type.GetType("System.String")); dt.Columns.Add("CN_S_LOT_NO", Type.GetType("System.String")); dt.Columns.Add("CN_S_UNIQUE_CODE", Type.GetType("System.String")); dt.Columns.Add("CN_S_SERIAL_NO", Type.GetType("System.String")); dt.Columns.Add("CN_F_QUANTITY", Type.GetType("System.String")); dt.Columns.Add("CN_S_MODEL", Type.GetType("System.String")); DataRow newRow; newRow = dt.NewRow(); newRow["CN_S_ITEM_NAME"] = ScanCodeClass.PrintBarCode.CN_S_ITEM_NAME; newRow["CN_S_ITEM_CODE"] = ScanCodeClass.PrintBarCode.CN_S_ITEM_CODE; newRow["CN_S_LOT_NO"] = ScanCodeClass.PrintBarCode.CN_S_LOT_NO; newRow["CN_S_UNIQUE_CODE"] = boxCode; newRow["CN_S_SERIAL_NO"] = ScanCodeClass.PrintBarCode.CN_S_SERIAL_NO; newRow["CN_F_QUANTITY"] = "1"; newRow["CN_S_MODEL"] = ScanCodeClass.PrintBarCode.CN_S_MODEL; dt.Rows.Add(newRow); returnJson = JsonConvert.SerializeObject(OperateResult.Succeed("", dt)); } } return returnJson; } catch (Exception ex) { Log.Error("GetBindTrayDetail异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #endregion #region 查询库存 [HttpGet] public OperateResult GetAreaQty(string itemCode, string lotNo, string areaCode) { try { return BLLCreator.Create().GetAreaQty(itemCode, lotNo, areaCode); } catch (Exception ex) { Log.Error("GetManualHandDetail异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message); } } #endregion #region 宇寿调用算法获取托盘 /// /// 宇寿调用算法获取托盘 /// /// 仓库编码 /// 库区编码 /// 物料编码 /// 物料规格 /// 物料数量 /// 身份验证 /// [HttpGet] public OperateResult GetLocationCodeAction(string stockCode, string areaCode, string itemCode, string lotNo, string traySpec, decimal locationQty, string tokenId) { try { return ValidateToken(tokenId, t => { Log.Error("宇寿调用算法获取托盘:", "开始!"); if (t == null) { return OperateResult.Error("登陆人员信息获取失败!"); } else { if (!string.IsNullOrEmpty(itemCode)) { //检查物料编码是否正确 var item = BLLCreator.Create().GetItem(itemCode); if (item == null) { return OperateResult.Error("当前物料编码未在AutoBom中找到!"); } } List lstArea = new List(); areaPriorClass areaClass = new areaPriorClass(); areaClass.areaCode = areaCode; areaClass.Prior = 1; lstArea.Add(areaClass); //调用出库算法,获取待出去托盘 OutAssignEnitty oAe = new OutAssignEnitty() { projectCode = "ys001", lstAreaPrior = lstArea, stockCode = stockCode, itemCode = itemCode, lotNo = lotNo, traySpec = traySpec, itemQty = locationQty, needCalLock = false, lockLocation = false//是否需要锁定货位 }; OutAssignResultEntity oaEresult = BLLCreator.Create().OutAssign(oAe); if (!oaEresult.Success) { Log.Error("调用出库算法,获取待出库托盘:", oaEresult.Msg); return OperateResult.Error(oaEresult.Msg);//货位获取失败! } return OperateResult.Succeed("", oaEresult); } }); } catch (Exception ex) { Log.Error("GetLocationCodeAction异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message); } } #endregion #region 宇寿入库调用算法获取位置 /// /// 宇寿入库调用算法获取位置 /// /// /// /// /// /// [HttpGet] public OperateResult GetZtEmptyCommandLocation(string areaCode, string trayCode, string itemCode, int locationQty) { try { if (!string.IsNullOrEmpty(itemCode)) { //检查物料编码是否正确 var item = BLLCreator.Create().GetItem(itemCode); if (item == null) { return OperateResult.Error("当前物料编码未在AutoBom中找到!"); } } //调用入库算法,获取空货位 List lstTmpArea = new List(); lstTmpArea.Add(new areaPriorClass { areaCode = areaCode, Prior = 1 }); InAssignEntity iAe = new InAssignEntity() { lstAreaPrior = lstTmpArea, logicAreaCode = "", objectCode = trayCode, projectCode = "ys001", lockLocation = false,//是否需要锁定货位 needCalLock = false }; iAe.lstDevice = null; InAssignResultEntity irEresult = BLLCreator.Create().InAssign(iAe); if (!irEresult.Success) { return OperateResult.Error(irEresult.Msg);//货位获取失败! } List lstLocation = new List(); locationEntity lEntity = new locationEntity(); lEntity.locationCode = irEresult.locationCode; lstLocation.Add(lEntity); return OperateResult.Succeed("", lstLocation); } catch (Exception ex) { Log.Error("GetZtEmptyCommandLocation异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message); } } #endregion #region 宇寿叫料 /// /// 宇寿叫料 /// /// 建议货位码 /// 目标库区 /// 起始托盘码 /// 目的货位码 /// 身份验证 /// [HttpGet] public OperateResult GetCallMaterialAction(string locationCode, string outStockType, string areaCode, string qTrayCode, string mTrayCode, string TaskType, string tokenId) { try { return ValidateToken(tokenId, t => { var logPara = LogType.LogPara("叫料"); if (t == null) { return OperateResult.Error("登陆人员信息获取失败!"); } else { //TN_WM_LOCATION_EXTEntity startlocation = BLLCreator.Create().GetExtModel(" where CN_S_LOCATION_CODE='" + locationCode + "'"); //if (startlocation.CN_S_LOCATION_STATE == Constants.Location_State_Normal) //{ // //锁定起点货位 // BLLCreator.Create>().Update(new { CN_S_LOCATION_STATE = "预出库锁定" }, new { CN_S_LOCATION_CODE = locationCode }); //} //转运货位-移动起点外层的货位 var moveResult = BLLCreator.Create().MoveLocation(locationCode, logPara); Log.Detail(logPara, "转运货位结果:" + moveResult.Success + ",信息:" + moveResult.Msg); if (!moveResult.Success) { BLLCreator.Create().RollBackLocation(moveResult, locationCode, logPara); return OperateResult.Error(moveResult.Msg); } TrayOnShelfEntity entity = new TrayOnShelfEntity(); entity.CN_S_DEVICE_NO = mTrayCode; //终点 entity.CN_S_LOCATION_CODE = locationCode; //起点 entity.CN_S_END_AREA_CODE = areaCode;//目标库区 entity.CN_S_TRAY_CODE = qTrayCode; //起始托盘码 entity.CN_S_TASK_TYPE = TaskType; //任务类型 entity.IN_STOCK_TYPE = outStockType; var result = BLLCreator.Create().SimZTDownShelfCallMaterialYS(entity, t); if (!result.Success) { BLLCreator.Create().RollBackLocation(moveResult, locationCode, logPara); } else { //增加库区量表 TN_WM_LOCATION_EXTEntity startlocation = BLLCreator.Create().GetExtModel(" where CN_S_LOCATION_CODE='" + locationCode + "'"); BLLCreator.Create().AddAllocQty(qTrayCode, startlocation.CN_S_STOCK_CODE, startlocation.CN_S_AREA_CODE, logPara); } Log.Detail(logPara, "调用叫料结果:" + JsonConvert.SerializeObject(result)); return result; } }); } catch (Exception ex) { Log.Error("GetCallMaterialAction异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message); } } #endregion #region 宇寿组盘检查托盘是否可用 /// /// 检查码盘托盘是否可用 /// /// /// [HttpGet] public string CheckTrayYSZP(string trayCode) { try { bool result = DALCreator.Create().CheckTrayBindLoc(trayCode); //后期需要增加判断托盘是否在任务执行中 if (result) { return JsonConvert.SerializeObject(OperateResult.Error("该托盘已绑定货位,组盘请解绑货位再组盘")); } else { DataTable dt = BLLCreator.Create().GetTrayDetailYS(trayCode); if (dt.Rows.Count == 0) { dt = BLLCreator.Create().GetTrayInfoYS(trayCode); } if (dt.Rows.Count == 0) { return JsonConvert.SerializeObject(OperateResult.Error("该托盘号在系统中不存在")); } else { return JsonConvert.SerializeObject(OperateResult.Succeed("", dt)); } } } catch (Exception ex) { Log.Error("CheckTrayYS异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #endregion #region 宇寿组盘 /// /// 组盘保存事件 /// /// /// [HttpPost] public string SaveGroupPlate(JObject jsonData) { try { Log.Info("===>宇寿组盘传进来的参数:", jsonData.ToString()); ItemOnTrayEntity entity = JsonConvert.DeserializeObject(jsonData.ToString()); return ValidateToken(entity.TokenId, t => { OperateResult oresult = BLLCreator.Create(t).SaveGroupPlateYS(entity, t); return JsonConvert.SerializeObject(oresult); }); } catch (Exception ex) { Log.Error("SaveGroupPlate异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message.ToString())); } } #endregion #region 宇寿呼叫空托 /// /// 宇寿呼叫空托 /// /// 数据Json /// /// [HANHE(LY)] CREATED BY 2018-12-12 [HttpPost] public OperateResult SimZTDownShelfAuto(JObject json) { try { Log.Info("整托上架开始", ""); TrayOnShelfEntity entity = JsonConvert.DeserializeObject(json.ToString()); return ValidateToken(entity.TokenId, t => { if (t == null) { return OperateResult.Error("登陆人员信息获取失败!"); } return BLLCreator.Create().SimZTDownShelfAutoYS(entity, t); }); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } } #endregion #region 宇寿空托回库 /// ///宇寿空托回库 /// /// 数据Json /// /// [HANHE(LY)] CREATED BY 2018-12-12 [HttpPost] public OperateResult SimZTShelfAuto(JObject json) { try { Log.Info("空托回库开始", ""); TrayOnShelfEntity entity = JsonConvert.DeserializeObject(json.ToString()); return ValidateToken(entity.TokenId, t => { if (t == null) { return OperateResult.Error("登陆人员信息获取失败!"); } return BLLCreator.Create().SimZTShelfAuto(entity, t); }); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } } #endregion #region 空托回库检测货位码和托盘码 /// /// 空托回库检测货位码和托盘码 /// /// /// [HttpGet] public string CheckInStockLocationEmpty(string locationCode) { try { OperateResult result = BLLCreator.Create().CheckInStockLocationEmpty(locationCode); return JsonConvert.SerializeObject(result); } catch (Exception ex) { Log.Error("CheckInStockLocation异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #endregion #region 空托回库检测托盘码 /// /// 空托回库检测托盘码 /// /// /// [HttpGet] public string CheckInTrayCode(string trayCode) { try { OperateResult result = BLLCreator.Create().CheckInTrayCode(trayCode); return JsonConvert.SerializeObject(result); } catch (Exception ex) { Log.Error("CheckInStockTray异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #endregion #region 获取托盘类型列表 /// /// 获取托盘类型列表 /// /// 托盘类型 /// [HttpGet] public string GetLocationType(string loctiontype) { try { return ValidateToken(x => { List LoctionList = new List(); AutoBomStockAreaEntity LoctionModel = null; LoctionModel = new AutoBomStockAreaEntity(); LoctionModel.CN_S_AREA_CODE = "120*100"; LoctionList.Add(LoctionModel); return JsonConvert.SerializeObject(OperateResult.Succeed("", LoctionList)); }); } catch (Exception ex) { return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #endregion #region 组盘时校验料箱码是否已经码盘 /// /// 组盘时校验料箱码是否已经码盘 /// /// /// [HttpGet] public string CheckUniCodeYSZp(string uniCode) { try { List lstDTLEntity = BLLCreator.Create>().GetList(new { CN_S_UNIQUE_CODE = uniCode }); if (lstDTLEntity.Any()) { bool result = DALCreator.Create().CheckTrayBindLocGroup(lstDTLEntity[0].CN_PARENT_GUID); if (result) { return JsonConvert.SerializeObject(OperateResult.Error("该料箱码所在的托盘未解绑货位,请先解绑再组盘!")); } else { return JsonConvert.SerializeObject(OperateResult.Succeed()); } } else { return JsonConvert.SerializeObject(OperateResult.Error("该料箱码未码盘,不在托盘中!")); } } catch (Exception ex) { Log.Error("CheckUniCodeYSZp异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #endregion #region 验证料箱码是否属于当前托盘 /// /// 验证料箱码是否属于当前托盘 /// /// /// /// [HttpGet] public IHttpActionResult CheckUniqueIsCurTray(string trayCode, string uniqueCode) { var result = BLLCreator.Create().CheckUniqueIsCurTray(trayCode, uniqueCode); return Json(new { Success = true, Result = result }); } #endregion #region 上料确认(整托、部分) /// /// 上架确认 /// /// /// 上架类型 all 整托 part 部分 /// /// [HttpGet] public IHttpActionResult UpMaterialSure(string trayCode, string type, string uniqueCodes) { var logPara = LogType.LogPara("上料确认(" + (type == "all" ? "整托" : "部分") + ")"); Log.Detail(logPara, "接收参数:trayCode:" + trayCode + ",type:" + type + ",uniqueCodes:" + uniqueCodes); var result = BLLCreator.Create().UpMaterialSure(trayCode, type, uniqueCodes, logPara); return Json(new { Success = result.Success, Message = result.Msg }); } #endregion #region 检查托盘(上料) [HttpGet] public IHttpActionResult CheckTrayByUpMaterial(string trayCode) { var logPara = LogType.LogPara("检查托盘(上料)"); Log.Detail(logPara, "接收参数托盘号:" + trayCode); var result = BLLCreator.Create().CheckTrayByUpMaterial(trayCode); Log.Detail(logPara, LogDescribe.Content(result)); return Json(new { Success = result.Success, Message = result.Msg }); } #endregion #region 移库 /// /// 移库保存 /// /// /// [HttpPost] public IHttpActionResult SaveMoveStock(SaveMoveStockDto saveMoveStockDto) { var logPara = LogType.LogPara("移库保存"); try { string tokenId = saveMoveStockDto.tokenId; var user = GetTokenInfo(tokenId).GetData(); //计算起点货位 Log.Detail(logPara, "接收参数:" + JsonConvert.SerializeObject(saveMoveStockDto)); var result = BLLCreator.Create().SaveMoveStock(saveMoveStockDto, logPara, user); Log.Detail(logPara, "返回结果:" + JsonConvert.SerializeObject(result)); logPara.logPara.Add(); return Json(new { Success = result.Success, Message = result.Msg }); } catch (Exception ex) { logPara.logPara.PushAndAdd(ex); return Json(new { Success = false, Message = ex.Message }); } } /// /// 实时移库 /// /// /// [HttpPost] public IHttpActionResult SaveCurrentMoveStock(SaveMoveStockDto saveMoveStockDto) { var logPara = LogType.LogPara("实时移库保存"); try { string tokenId = saveMoveStockDto.tokenId; var user = GetTokenInfo(tokenId).GetData(); //计算起点货位 Log.Detail(logPara, "接收参数:" + JsonConvert.SerializeObject(saveMoveStockDto)); var result = BLLCreator.Create().SaveCurrentMoveStock(saveMoveStockDto, logPara, user); Log.Detail(logPara, "返回结果:" + JsonConvert.SerializeObject(result)); logPara.logPara.Add(); return Json(new { Success = result.Success, Message = result.Msg }); } catch (Exception ex) { logPara.logPara.PushAndAdd(ex); return Json(new { Success = false, Message = ex.Message }); } } /// /// 移库检查最大可移动数 /// /// /// /// [HttpGet] public IHttpActionResult CheckMoveStockAllocQty(string startArea, string itemCode) { var areaQtyList = BLLCreator.Create>().GetList(new { CN_S_ITEM_CODE = itemCode, CN_S_STOCK_AREA = startArea }); decimal qty = 0; try { var item = DALCreator.Create().GetItemEntity(itemCode); if (item.CN_F_NW == 0) { return Json(new { Success = false, Msg ="当前物料没维护毛重"}); } foreach (var areaQty in areaQtyList) { if (item.CN_F_NW > 0) qty += (areaQty.CN_F_QUANTITY - areaQty.CN_F_ALLOC_QTY) / item.CN_F_NW; } } catch (Exception ex) { Log.Detail("移库检查最大可移动数", "出错!" + ex.Message); } return Json(new { Success = true, Qty = Decimal.ToInt32(qty) }); } #endregion #region (PDA接口)整托上架自动 /// /// 整托执行上架 宇寿 /// /// 数据Json /// /// [HANHE(XDL)] CREATED BY 2018-12-12 [HttpPost] public OperateResult SimZTShelfAutoYS(JObject json) { try { Log.Info("整托上架开始", ""); TrayOnShelfEntity entity = JsonConvert.DeserializeObject(json.ToString()); return ValidateToken(entity.TokenId, t => { if (t == null) { return OperateResult.Error("登陆人员信息获取失败!"); } return BLLCreator.Create().SimZTShelfAutoYS(entity, t); }); Log.Info("整托上架结束", ""); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } } #endregion #region (PDA接口)整托上架自动 /// /// 整托执行上架 宇寿 /// /// 数据Json /// /// [HANHE(XDL)] CREATED BY 2018-12-12 [HttpPost] public OperateResult SimZTShelfAutoYSWithBind(JObject json) { try { Log.Info("整托上架开始", ""); TrayOnShelfEntity entity = JsonConvert.DeserializeObject(json.ToString()); return ValidateToken(entity.TokenId, t => { if (t == null) { return OperateResult.Error("登陆人员信息获取失败!"); } OperateResult oresult = new OperateResult(); if (!entity.BIND_TRAY_LOCATION) { oresult = BLLCreator.Create(t).AddTrayLocationRelationYS(entity.CN_S_TRAY_CODE, entity.CN_S_DEVICE_NO, entity.IN_STOCK_TYPE, t, entity.projectCode); if (oresult.Success) { oresult = BLLCreator.Create().SimZTShelfAutoYS(entity, t); } } else { oresult = BLLCreator.Create().SimZTShelfAutoYS(entity, t); } return oresult; }); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } } #endregion #region 打印 [HttpPost] public OperateResult GetPrintData(SearchModel searchModel) { try { OperateResult result; result = BLLCreator.Create().GetHistory(searchModel); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } } [HttpPost] public IHttpActionResult SetPrintNo(dynamic data) { var result = BLLCreator.Create().SetPrintNo(data); return Json(result); } [HttpGet] public IHttpActionResult CancelPrintNo(string orderNo, string orderType) { var result = BLLCreator.Create().CancelPrintNo(orderNo, orderType); return Json(result); } [HttpGet] public string GetDictionary(string dictName) { string dictionary = WebApiManager.HttpAutoBom_Get("api/Dictionary/GetChildByName?DictName=" + dictName); return dictionary; } [HttpGet] public string GetBillNo(string ruleName) { var postData = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + ruleName + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}"; string orderNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); return orderNo; } [HttpGet] public decimal GetItemWeight(string itemCode) { var item = DALCreator.Create().GetItemEntity(itemCode); if (item == null) return 0; return item.CN_F_NW; } [HttpPost] public OperateResult GetTrayList(SearchModel searchModel) { string trayCode = Util.ToString(searchModel.SearchCondition.CN_S_TRAY_CODE); string trayType = Util.ToString(searchModel.SearchCondition.CN_S_TRAY_TYPE); string spec = Util.ToString(searchModel.SearchCondition.CN_S_SPEC); return BLLCreator.Create().GetForPrint(trayCode, trayType, spec, searchModel.PageIndex, searchModel.PageSize); } [HttpGet] public OperateResult GetLocationList(int pageIndex, int pageSize, string areaCode, string tokenId, string roadWay, string row, string locationNo) { int total = 0; var listLocation = BLLCreator.Create().GetLocationInfo(pageIndex, pageSize, areaCode, roadWay, row, locationNo, "新建", out total).Select(b => new { CN_S_LOCATION_CODE = b.CN_S_LOCATION_CODE, CN_S_AREA_CODE = b.CN_S_AREA_CODE, CN_S_ROADWAY = b.CN_S_ROADWAY, CN_S_ROW = b.CN_S_ROW, CN_S_COL = b.CN_S_COL, CN_S_FLOOR = b.CN_S_FLOOR }); return OperateResult.Succeed("", new { rows = listLocation, total = total }); } [HttpGet] public OperateResult GetBoxingList(int pageIndex, int pageSize) { int total = 0; var data = BLLCreator.Create().GetPageList(pageIndex, pageSize, out total); return OperateResult.Succeed("", new { rows = data, total = total }); } #endregion #region 盘点 /// /// 盘点保存 /// /// token验证值 /// 数据Json /// /// [HANHE(XDL)] CREATED BY 2018-11-17 [HttpPost] public OperateResult SaveCheckResultYS(JObject jsonData) { Log.Info("开始调用SaveCheckResultYS", JsonConvert.SerializeObject(jsonData)); TN_WM_CHECK_MAINEntity entity = JsonConvert.DeserializeObject(jsonData.ToString()); try { return ValidateToken(entity.TokenId, t => { OperateResult result = BLLCreator.Create(t).SaveCheckPDA(entity, t); return result; }); } catch (Exception ex) { Log.Error("SaveCheckResultYS异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message.ToString()); } } [HttpGet] public OperateResult LockLocation(string locationCode, string tokenId) { OperateResult operateResult = new OperateResult(); try { List GetModel = BLLCreator.Create().GetModel("where CN_S_LOCATION_CODE='" + locationCode + "'"); if (GetModel.Count == 0) { return OperateResult.Error("在表TN_WM_LOCATION_EXT中未查询到该货位!"); } List lstTask = DALCreator.Create().GetTaskByAreaCode(GetModel[0].CN_S_AREA_CODE.Trim()); List lstInTaskLocation = new List(); if (lstTask.Count > 0) { lstInTaskLocation.AddRange(lstTask.Where(a => a.CN_S_TASK_TYPE == "叫料").Select(o => o.CN_S_START_BIT).ToList()); lstInTaskLocation.AddRange(lstTask.Where(a => a.CN_S_TASK_TYPE == "上架").Select(o => o.CN_S_END_BIT).ToList()); List lstTrueLocations = DALCreator.Create().GetLocationCodeListByLocationCode(lstInTaskLocation); foreach (TN_WM_LOCATIONCODE_EXT_Entity entity in lstTrueLocations) { if (entity.CN_S_ROW == GetModel[0].CN_S_ROW && entity.CN_S_ROW == GetModel[0].CN_S_ROW) { return OperateResult.Error("该货位所在列有正在执行的出入库任务,不允许盘点锁定!"); } } } return ValidateToken(tokenId, t => { operateResult = BLLCreator.Create(t).LockLocation(locationCode, t); return operateResult; }); } catch (Exception ex) { Log.Error("LockLocation异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message.ToString()); } } [HttpGet] public OperateResult UnLockLocation(string locationCode, string tokenId) { OperateResult operateResult = new OperateResult(); try { return ValidateToken(tokenId, t => { operateResult = BLLCreator.Create(t).UnLockLocation(locationCode, t); return operateResult; }); } catch (Exception ex) { Log.Error("LockLocation异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message.ToString()); } } #endregion #region 盘点-获取托盘中物料信息 /// /// 获取托盘中的物料信息 /// /// /// [HttpGet] public OperateResult GetCheckTrayDetail(string trayCode, string locationCode) { try { OperateResult result = new OperateResult(); DataTable dt = new DataTable(); if (!string.IsNullOrEmpty(trayCode)) { List lstEntity = DALCreator.Create().GetListByTrayCode(trayCode); if (lstEntity.Count == 0) { return OperateResult.Error("该托盘没有绑定货位,不允许盘点!"); } else { List GetModel = BLLCreator.Create().GetModel("where CN_S_LOCATION_CODE='" + lstEntity[0].CN_S_LOCATION_CODE + "'"); if (GetModel.Count == 0) { return OperateResult.Error("在表TN_WM_LOCATION_EXT中未查询到该货位!"); } AutoBomStockAreaEntity areaModel = DALCreator.Create().GetAreaModelByLocation(lstEntity[0].CN_S_LOCATION_CODE); if (areaModel == null) { //非法的目的货位 return OperateResult.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到该货位信息!", lstEntity[0].CN_S_LOCATION_CODE)); } //货位状态:正常 if (GetModel[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal) { return OperateResult.Error(string.Format("当前货位状态为{0},不允许盘点或先解锁后再盘点!", GetModel[0].CN_S_LOCATION_STATE)); } dt = BLLCreator.Create().GetTrayDetailCheck(trayCode); DataTable dt1 = BLLCreator.Create().GetTrayInfoYS(trayCode); if (dt1.Rows.Count == 0) { return OperateResult.Error("该托盘号在系统中不存在"); } result = OperateResult.Succeed(lstEntity[0].CN_S_LOCATION_CODE + ";" + areaModel.CN_S_AREA_CLASS + ";" + dt1.Rows[0][0].ToString(), dt); } } if (!string.IsNullOrEmpty(locationCode)) { List lstEntity = DALCreator.Create().GetListByLocationCode(locationCode); if (lstEntity.Count == 0) { return OperateResult.Error("该货位没有绑定托盘,不允许盘点!"); } else { List GetModel = BLLCreator.Create().GetModel("where CN_S_LOCATION_CODE='" + locationCode + "'"); if (GetModel.Count == 0) { return OperateResult.Error("在表TN_WM_LOCATION_EXT中未查询到该货位!"); } AutoBomStockAreaEntity areaModel = DALCreator.Create().GetAreaModelByLocation(locationCode); if (areaModel == null) { //非法的目的货位 return OperateResult.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到该货位信息!", locationCode)); } //货位状态:正常 if (GetModel[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal) { return OperateResult.Error(string.Format("当前货位状态为{0},不允许盘点或先解锁后再盘点!", GetModel[0].CN_S_LOCATION_STATE)); } dt = BLLCreator.Create().GetTrayDetailCheck(lstEntity[0].CN_S_TRAY_CODE); DataTable dt1 = BLLCreator.Create().GetTrayInfoYS(lstEntity[0].CN_S_TRAY_CODE); if (dt1.Rows.Count == 0) { return OperateResult.Error("该托盘号在系统中不存在"); } return OperateResult.Succeed(lstEntity[0].CN_S_TRAY_CODE + ";" + areaModel.CN_S_AREA_CLASS + ";" + dt1.Rows[0][0].ToString(), dt); } } return result; } catch (Exception ex) { Log.Error("GetCheckTrayDetail异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message); } } #endregion #region 人工搬运 [HttpGet] public OperateResult GetManualHandDetail(string itemCode, string lotNo, string areaCode) { try { OperateResult result = new OperateResult(); DataTable dt = DALCreator.Create().GetManualHandDetail(itemCode, lotNo, areaCode); return OperateResult.Succeed("", dt); } catch (Exception ex) { Log.Error("GetManualHandDetail异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message); } } public OperateResult GetManualTrayDetail(string trayCode, string locationCode,string itemCode,string lotNo) { try { OperateResult result = new OperateResult(); DataTable dt = new DataTable(); if (!string.IsNullOrEmpty(trayCode)) { List lstEntity = DALCreator.Create().GetListByTrayCode(trayCode); if (lstEntity.Count == 0) { return OperateResult.Error("该托盘没有绑定货位,不允许搬运!"); } else { List GetModel = BLLCreator.Create().GetModel("where CN_S_LOCATION_CODE='" + lstEntity[0].CN_S_LOCATION_CODE + "'"); if (GetModel.Count == 0) { return OperateResult.Error("在表TN_WM_LOCATION_EXT中未查询到该货位!"); } AutoBomStockAreaEntity areaModel = DALCreator.Create().GetAreaModelByLocation(lstEntity[0].CN_S_LOCATION_CODE); if (areaModel == null) { //非法的目的货位 return OperateResult.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到该货位信息!", lstEntity[0].CN_S_LOCATION_CODE)); } //货位状态:正常 if (GetModel[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal) { return OperateResult.Error(string.Format("当前货位状态为{0},不允许搬运!", GetModel[0].CN_S_LOCATION_STATE)); } dt = BLLCreator.Create().GetTrayDetailManual(trayCode,itemCode,lotNo); result = OperateResult.Succeed(lstEntity[0].CN_S_LOCATION_CODE, dt); } } if (!string.IsNullOrEmpty(locationCode)) { List lstEntity = DALCreator.Create().GetListByLocationCode(locationCode); if (lstEntity.Count == 0) { return OperateResult.Error("该货位没有绑定托盘,不允许搬运!"); } else { List GetModel = BLLCreator.Create().GetModel("where CN_S_LOCATION_CODE='" + locationCode + "'"); if (GetModel.Count == 0) { return OperateResult.Error("在表TN_WM_LOCATION_EXT中未查询到该货位!"); } AutoBomStockAreaEntity areaModel = DALCreator.Create().GetAreaModelByLocation(locationCode); if (areaModel == null) { //非法的目的货位 return OperateResult.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到该货位信息!", locationCode)); } //货位状态:正常 if (GetModel[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal) { return OperateResult.Error(string.Format("当前货位状态为{0},不允许搬运!", GetModel[0].CN_S_LOCATION_STATE)); } dt = BLLCreator.Create().GetTrayDetailManual(lstEntity[0].CN_S_TRAY_CODE,itemCode,lotNo); return OperateResult.Succeed(lstEntity[0].CN_S_TRAY_CODE, dt); } } return result; } catch (Exception ex) { Log.Error("GetManualTrayDetail异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message); } } [HttpGet] public OperateResult LockLocationManual(string locationCode, string tokenId) { OperateResult operateResult = new OperateResult(); try { List GetModel = BLLCreator.Create().GetModel("where CN_S_LOCATION_CODE='" + locationCode + "'"); if (GetModel.Count == 0) { return OperateResult.Error("在表TN_WM_LOCATION_EXT中未查询到该货位!"); } List lstTask = DALCreator.Create().GetTaskByAreaCode(GetModel[0].CN_S_AREA_CODE.Trim()); List lstInTaskLocation = new List(); if (lstTask.Count > 0) { lstInTaskLocation.AddRange(lstTask.Where(a => a.CN_S_TASK_TYPE == "叫料").Select(o => o.CN_S_START_BIT).ToList()); lstInTaskLocation.AddRange(lstTask.Where(a => a.CN_S_TASK_TYPE == "上架").Select(o => o.CN_S_END_BIT).ToList()); List lstTrueLocations = DALCreator.Create().GetLocationCodeListByLocationCode(lstInTaskLocation); foreach (TN_WM_LOCATIONCODE_EXT_Entity entity in lstTrueLocations) { if (entity.CN_S_ROW == GetModel[0].CN_S_ROW && entity.CN_S_ROW == GetModel[0].CN_S_ROW) { return OperateResult.Error("该货位所在列有正在执行的出入库任务,不允许人工搬运锁定!"); } } } return ValidateToken(tokenId, t => { operateResult = BLLCreator.Create(t).LockLocationManual(locationCode, t); return operateResult; }); } catch (Exception ex) { Log.Error("LockLocation异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message.ToString()); } } [HttpGet] public OperateResult UnLockLocationManual(string locationCode, string tokenId) { OperateResult operateResult = new OperateResult(); try { return ValidateToken(tokenId, t => { operateResult = BLLCreator.Create(t).UnLockLocationManual(locationCode, t); return operateResult; }); } catch (Exception ex) { Log.Error("LockLocation异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message.ToString()); } } [HttpPost] public OperateResult SaveManualCarryYS(JObject jsonData) { TN_WM_CHECK_MAINEntity entity = JsonConvert.DeserializeObject(jsonData.ToString()); try { return ValidateToken(entity.TokenId, t => { OperateResult result = BLLCreator.Create(t).SaveCarryPDA(entity, t); return result; }); } catch (Exception ex) { Log.Error("SaveCheckResultYS异常:====>", ex.Message + ex.StackTrace); return OperateResult.Error(ex.Message.ToString()); } } #endregion #region 获取物料信息 /// /// 获取扫描物料实体信息 /// /// /// [HttpGet] public string GetItemDetail(string itemCode, string areaCode) { try { AutoBomItemEntityYS entity = BLLCreator.Create().GetItemYS(itemCode); if (entity == null) { return JsonConvert.SerializeObject(OperateResult.Error("未找到该物料信息")); } else { //查询库区中该物料对应的指令批次,并按照从小到大排序 List lstLotNo = DALCreator.Create().GetLotList(itemCode, areaCode); entity.lstLotNo = lstLotNo; return JsonConvert.SerializeObject(OperateResult.Succeed("", entity)); } } catch (Exception ex) { Log.Error("GetItemDetail异常:====>", ex.Message + ex.StackTrace); return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } [HttpGet] public IHttpActionResult GetItem(string itemCode) { itemCode = itemCode.Replace("\r", "").Replace("\n", ""); var item = BLLCreator.Create().GetItem(itemCode); if (item == null) return Json(new { Success = false }); return Json(new { Success = true, Data = item }); } #endregion } }