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;
}
}
}