using HH.Redis.ReisModel;
using HH.WMS.BLL;
using HH.WMS.BLL.Algorithm;
using HH.WMS.BLL.Basic;
using HH.WMS.BLL.Common;
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.Algorithm;
using HH.WMS.Entitys.Ams;
using HH.WMS.Entitys.Basic;
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 NtApiController : BaseController
{
#region 根据卸货区获取车牌号磅单号
///
/// 根据卸货区获取车牌号磅单号
///
/// 卸货区编码
///
[HttpGet]
public OperateResult GetPoundInfoByArea(string areaCode)
{
try
{
return BLLCreator.Create().GetPoundInfoByArea(areaCode);
}
catch (Exception ex)
{
Log.Error("GetPoundInfoByArea异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message);
}
}
#endregion
#region 批量下达卸货区到称重点的任务
///
/// 批量下达卸货区到称重点的任务
///
/// 卸货区编码
///
[HttpPost]
public OperateResult CallAGVCarry(List lstNeedCarray)
{
try
{
return ValidateToken(lstNeedCarray[0].TokenId, t =>
{
if (t == null)
{
return OperateResult.Error("登陆人员信息获取失败!");
}
return BLLCreator.Create().CallAGVCarry(lstNeedCarray, t);
});
}
catch (Exception ex)
{
Log.Error("CallAGVCarry异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message);
}
}
#endregion
#region 检查托盘是否可用并返回托盘中物料信息
///
/// 检查托盘是否可用并返回托盘中物料信息
///
/// 卸货区编码
///
[HttpGet]
public OperateResult CheckMpTray(string trayCode, string itemClass)
{
try
{
OperateResult result = BLLCreator.Create().CheckMpTray(trayCode, itemClass);
return result;
}
catch (Exception ex)
{
Log.Error("CheckMpTray异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message.ToString());
}
}
#endregion
#region 检查托盘是否可用并返回托盘中物料信息
///
/// 检查托盘是否可用并返回托盘中物料信息
///
/// 卸货区编码
///
[HttpGet]
public OperateResult CheckMpLocation(string locationCode, string itemClass)
{
try
{
OperateResult result = BLLCreator.Create().CheckMpLocation(locationCode, itemClass);
return result;
}
catch (Exception ex)
{
Log.Error("CheckMpLocation异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message.ToString());
}
}
#endregion
#region 码盘保存
///
/// 码盘保存
///
/// token验证值
/// 数据Json
///
/// [HANHE(XDL)] CREATED BY 2018-11-17
[HttpPost]
public string SaveSimPalletItemRelation(JObject jsonData)
{
try
{
ItemOnTrayEntity entity = JsonConvert.DeserializeObject(jsonData.ToString());
return ValidateToken(entity.TokenId, t =>
{
OperateResult oresult = BLLCreator.Create(t).SaveSimPalletItemRelation(entity, t);
if (oresult.Success)
{
if (!entity.BIND_TRAY_LOCATION)
{
if (!string.IsNullOrEmpty(entity.CN_S_LOCATION_CODE))
{
oresult = BLLCreator.Create(t).AddTrayLocationRelation(entity.CN_S_TRAY_CODE, entity.CN_S_LOCATION_CODE, t, entity.PROJECT_CODE);
if (!oresult.Success)
{
oresult.Msg = "码盘成功但绑定货位失败:" + oresult.Msg;
}
}
}
}
else
{
oresult.Msg = "码盘失败:" + oresult.Msg;
}
return JsonConvert.SerializeObject(oresult);
});
}
catch (Exception ex)
{
Log.Error("SaveSimPalletItemRelation异常:====>", ex.Message + ex.StackTrace);
return JsonConvert.SerializeObject(OperateResult.Error(ex.Message.ToString()));
}
}
#endregion
#region 根据卸货区判断库区中是否有执行中的任务
///
/// 根据卸货区判断库区中是否有执行中的任务
///
/// 卸货区编码
///
[HttpGet]
public OperateResult CheckTaskInArea(string areaCode)
{
try
{
return BLLCreator.Create().CheckTaskInArea(areaCode);
}
catch (Exception ex)
{
Log.Error("GetPoundInfoByArea异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message);
}
}
#endregion
#region 整托上架自动 检查入库起点是否可用
///
/// 检查入库起点是否可用
///
///
///
[HttpGet]
public OperateResult CheckInStockLocation(string locationCode)
{
try
{
OperateResult result = BLLCreator.Create().CheckInStockLocation(locationCode);
return result;
}
catch (Exception ex)
{
Log.Error("CheckInStockLocation异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message);
}
}
///
/// 检查托盘是否可用
///
///
///
[HttpGet]
public OperateResult CheckInStockTray(string trayCode)
{
try
{
OperateResult result = BLLCreator.Create().CheckInStockTray(trayCode);
return result;
}
catch (Exception ex)
{
Log.Error("CheckInStockTray异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message);
}
}
#endregion
#region PDA接口-获取建议货位
///
/// 整托获取建议货位-空货位
///
/// 库区
/// 托盘编码
/// 物料编码
/// 获取货位的数量
/// tokenId
///
[HttpGet]
public OperateResult GetZtEmptyCommandLocation(string areaCode, string trayCode, string itemCode, int locationQty)
{
try
{
//调用入库算法,获取空货位
List lstTmpArea = new List();
lstTmpArea.Add(new areaPriorClass { areaCode = areaCode, Prior = 1 });
InAssignEntity iAe = new InAssignEntity()
{
lstAreaPrior = lstTmpArea,
logicAreaCode = "",
objectCode = trayCode,
projectCode = "ntsd",
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 (PDA接口)整托上架自动 带绑定货位
///
/// 整托执行上架 宇寿
///
/// 数据Json
///
/// [HANHE(XDL)] CREATED BY 2018-12-12
[HttpPost]
public OperateResult SimZTShelfAutoWithBind(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).AddTrayLocationRelation(entity.CN_S_TRAY_CODE, entity.CN_S_LOCATION_CODE, t, entity.projectCode);
if (oresult.Success)
{
oresult = BLLCreator.Create().SimZTShelfAuto(entity, t);
}
}
else
{
oresult = BLLCreator.Create().SimZTShelfAuto(entity, t);
}
return oresult;
});
}
catch (Exception ex)
{
return OperateResult.Error(ex.Message.ToString());
}
}
#endregion
#region 叫料
///
/// 检查码盘货位是否可用
///
///
///
[HttpGet]
public string CheckLocation(string locationCode)
{
try
{
OperateResult result = BLLCreator.Create().CheckLocation(locationCode);
return JsonConvert.SerializeObject(result);
}
catch (Exception ex)
{
Log.Error("CheckLocation异常:====>", ex.Message + ex.StackTrace);
return JsonConvert.SerializeObject(OperateResult.Error(ex.Message));
}
}
///
/// 宇寿叫料
///
/// 建议货位码
/// 目标库区
/// 起始托盘码
/// 目的货位码
/// 身份验证
///
[HttpGet]
public OperateResult GetCallMaterialAction(string locationCode, 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
{
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; //任务类型
var result = BLLCreator.Create().SimZTDownShelfAuto(entity, t);
if (result.Success)
{
//增加库区量表
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);
}
return result;
}
});
}
catch (Exception ex)
{
Log.Error("GetCallMaterialAction异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message);
}
}
#endregion
#region 宇寿调用算法获取托盘
///
/// 宇寿调用算法获取托盘
///
/// 仓库编码
/// 库区编码
/// 物料编码
/// 物料规格
/// 物料数量
/// 身份验证
///
[HttpGet]
public OperateResult GetLocationCodeAction(string stockCode, string areaCode, string itemCode, 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 = "ntsd",
lstAreaPrior = lstArea,
stockCode = stockCode,
itemCode = itemCode,
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 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));
}
}
///
/// 绑定货位等同入库,增加仓库、库区库存
///
/// 托盘编码
/// 货位编码
///
/// [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).AddTrayLocationRelation(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()));
}
}
///
/// 绑定货位等同出库,减少仓库、库区库存
///
/// 托盘编码
/// 货位编码
///
/// [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).DeleteTrayLocationRelation(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 GetTrayDetail(string trayCode)
{
try
{
OperateResult result = new OperateResult();
DataTable dt = BLLCreator.Create().GetTrayDetail(trayCode);
//判断托盘是否在容器管理表中维护
TN_WM_B_TRAY_INFOEntity trayModel = BLLCreator.Create < TN_WM_B_TRAY_INFOBLL>().GetModel(trayCode);
if (trayModel != null)
{
return JsonConvert.SerializeObject(OperateResult.Succeed(trayModel.CN_S_USE_STATE, dt));
}
else
{
return JsonConvert.SerializeObject(OperateResult.Succeed("", dt));
}
}
catch (Exception ex)
{
Log.Error("GetTrayDetail异常:====>", ex.Message + ex.StackTrace);
return JsonConvert.SerializeObject(OperateResult.Error(ex.Message));
}
}
///
/// 获取并筐区货位物料托盘信息
///
///
///
[HttpGet]
public OperateResult GetMergeTrayInfo(string locationCode)
{
try
{
OperateResult result = BLLCreator.Create().GetMergeTrayInfo(locationCode);
return result;
}
catch (Exception ex)
{
Log.Error("GetMergeTrayInfo异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message);
}
}
///
/// 获取待并笼托盘信息
///
///
///
[HttpGet]
public OperateResult GetNeedMergeTray(string areaCode)
{
try
{
OperateResult result = BLLCreator.Create().GetNeedMergeTray(areaCode);
return result;
}
catch (Exception ex)
{
Log.Error("GetNeedMergeTray异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message);
}
}
///
/// 整托下架接口
///
///
///
[HttpPost]
public OperateResult SimZTDownShelfAuto(JObject jsonData)
{
try
{
TrayOnShelfEntity entity = JsonConvert.DeserializeObject(jsonData.ToString());
var logPara = LogType.LogPara("下架");
return ValidateToken(entity.TokenId, t =>
{
OperateResult oresult = BLLCreator.Create(t).SimZTDownShelfAuto(entity, t);
if (oresult.Success)
{
//增加库区量表
TN_WM_LOCATION_EXTEntity startlocation = BLLCreator.Create().GetExtModel(" where CN_S_LOCATION_CODE='" + entity.CN_S_LOCATION_CODE + "'");
BLLCreator.Create().AddAllocQty(entity.CN_S_TRAY_CODE, startlocation.CN_S_STOCK_CODE, startlocation.CN_S_AREA_CODE, logPara);
}
return oresult;
});
}
catch (Exception ex)
{
Log.Error("SimZTDownShelfAuto异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message.ToString());
}
}
///
/// 保存并笼数据
///
///
///
///
[HttpGet]
public OperateResult SaveMerge(string locationCode, string isCreate, string inAreaCode, string trayUseState, string TokenId)
{
try
{
return ValidateToken(TokenId, t =>
{
OperateResult oresult = BLLCreator.Create().SaveMergeTray(locationCode, isCreate, inAreaCode, trayUseState, t);
return oresult;
});
}
catch (Exception ex)
{
Log.Error("SaveMerge异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message.ToString());
}
}
[HttpPost]
public OperateResult SaveMergeNew(JObject jsonData)
{
try
{
ItemOnTrayEntity entity = JsonConvert.DeserializeObject(jsonData.ToString());
return ValidateToken(entity.TokenId, t =>
{
OperateResult oresult = BLLCreator.Create().SaveMergeTrayNew(entity, t);
return oresult;
});
}
catch (Exception ex)
{
Log.Error("SaveMerge异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message.ToString());
}
}
#endregion
#region 生成流转任务
///
/// 生成流转任务(朝阳)
///
///
///
/// [HanHe(XDL)] CREATED 2018/6/30
[HttpGet]
public string CreateTransTask(string startPosition, string endPosition, string tranType, string taskPriority, string projectCode)
{
Log.Info("调用CreateTransTask", "请求参数:startPosition" + startPosition.ToString() + "; endPosition" + endPosition.ToString() + "; tranType" + tranType.ToString() + "; taskPriority" + taskPriority.ToString());
try
{
return ValidateToken(t =>
{
OperateResult result = BLLCreator.Create(t).CreateTransTask(startPosition, endPosition, tranType, taskPriority, projectCode, t);
return JsonConvert.SerializeObject(result);
});
}
catch (Exception ex)
{
Log.Error("CreateTransTask异常:====>", ex.Message + ex.StackTrace);
return JsonConvert.SerializeObject(OperateResult.Error(ex.Message.ToString()));
}
}
#endregion
#region 南通看板
[HttpGet]
public string GetAllAgvStatus()
{
var result = WebApiManager.HttpAms_Get("api/AmsInf/GetAllAgvStatus");
return result;
}
[HttpGet]
public string GetMongoTaskStatus()
{
var result = WebApiManager.HttpAms_Get("api/AmsInf/GetMongoTaskStatus");
return result;
}
[HttpGet]
public OperateResult StockList()
{
try
{
if (SysCache.Stock == null || SysCache.Stock.Count == 0)
SysCache.Stock = BLLCreator.Create().GetStockList();
return OperateResult.Succeed(null, SysCache.Stock);
}
catch (Exception ex)
{
return OperateResult.Error(ex.Message);
}
}
[HttpGet]
public OperateResult GetArea(string stockCode, int include)
{
List areaList = BLLCreator.Create().GetArea(include, stockCode);
return OperateResult.Succeed("", areaList);
}
[HttpGet]
public OperateResult GetRowsList(string stockCode, string areaCode)
{
List structreList = BLLCreator.Create().GetStructList(stockCode, areaCode);
structreList = structreList.OrderBy(e => e.CN_S_ROW).ToList();
return OperateResult.Succeed("", structreList);
}
[HttpGet]
public string GetTunnelLocations(string stockCode, string areaCode)
{
try
{
DataTable dt;
if (areaCode.Equals("CPKTE,CPKTD"))
{
dt = BLLCreator.Create().ViewState(stockCode, areaCode, "");
}
else
{
dt = BLLCreator.Create().ViewState(stockCode, areaCode, "");
}
return JsonConvert.SerializeObject(OperateResult.Succeed("", dt));
}
catch (Exception ex)
{
return JsonConvert.SerializeObject(OperateResult.Error("查询异常!" + ex.ToString()));
}
}
#endregion
#region 检查并获取托盘信息
///
/// 检查托盘是否可用并返回托盘中物料信息
///
/// 卸货区编码
///
[HttpGet]
public OperateResult GetTrayInfo(string trayCode)
{
try
{
OperateResult result = BLLCreator.Create().GetTrayInfo(trayCode);
return result;
}
catch (Exception ex)
{
Log.Error("CheckMpTray异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message.ToString());
}
}
#endregion
#region 新增或更新托盘信息
///
/// 检查托盘是否可用并返回托盘中物料信息
///
/// 卸货区编码
///
[HttpPost]
public OperateResult UpdateTrayInfo(JObject jsonData)
{
try
{
TN_WM_B_TRAY_INFOEntity entity = JsonConvert.DeserializeObject(jsonData.ToString());
return ValidateToken(entity.TokenId, t =>
{
OperateResult result = BLLCreator.Create().UpdateTrayInfo(entity, t);
return result;
});
}
catch (Exception ex)
{
Log.Error("UpdateTrayInfo异常:====>", ex.Message + ex.StackTrace);
return OperateResult.Error(ex.Message.ToString());
}
}
#endregion
}
}