using HH.WMS.BLL.Basic;
|
using HH.WMS.BLL.InStock;
|
using HH.WMS.BLL.Interface;
|
using HH.WMS.BLL.SysMgr;
|
using HH.WMS.Common;
|
using HH.WMS.Common.External;
|
using HH.WMS.Common.Response;
|
using HH.WMS.DAL;
|
using HH.WMS.DAL.Algorithm;
|
using HH.WMS.DAL.Basic;
|
using HH.WMS.DAL.SysMgr;
|
using HH.WMS.DAL.Tzlj;
|
using HH.WMS.Entitys;
|
using HH.WMS.Entitys.Basic;
|
using HH.WMS.Entitys.Entitys;
|
using HH.WMS.Entitys.External;
|
using HH.WMS.Entitys.Tzlj;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Globalization;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HH.WMS.BLL.External
|
{
|
/// <summary>
|
/// 蓝月亮
|
/// </summary>
|
public class WmsApiForLylBLL : WmsApiBaseBLL
|
{
|
#region InWorkArea
|
|
public override ExecuteInWorkAreaPara InWorkAreaHandlePara(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
//任务号为空通过autobom生成任务号
|
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入库任务号异常,请检查是否维护生成规则!");
|
return executeInWorkAreaPara;
|
}
|
}
|
|
//托盘码为空通过autobom生成托盘码
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.trayCode))
|
{
|
var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
|
executeInWorkAreaPara.InWorkAreaEntity.trayCode = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.trayCode))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("生成虚拟托盘号异常,请检查是否维护生成规则!");
|
return executeInWorkAreaPara;
|
}
|
}
|
|
//验证物料编码
|
if (executeInWorkAreaPara.InWorkAreaEntity.data != null)
|
{
|
foreach (var itemData in executeInWorkAreaPara.InWorkAreaEntity.data)
|
{
|
var item = BLLCreator.Create<HH.WMS.BLL.Basic.TN_WMS_ITEMBLL>().GetItem(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中没有维护");
|
return executeInWorkAreaPara;
|
}
|
}
|
}
|
|
// 是否有终点位置
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.endBit))
|
{
|
// 获取蓝月亮wms 提供的终点位置
|
string startBit = executeInWorkAreaPara.InWorkAreaEntity.startBit;
|
string itemCode = executeInWorkAreaPara.InWorkAreaEntity.itemCode;
|
var postBit = "{\"startBit\":\"" + startBit + "\",\"itemCode\":\"" + itemCode + "\"}";
|
// 接口待定
|
executeInWorkAreaPara.InWorkAreaEntity.endBit = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postBit);
|
// 如果蓝月亮wms没有提供终点位置,在配置文件中获取终点
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.endBit))
|
{
|
// string Type = System.Configuration.ConfigurationManager.AppSettings["Type"].ToString();
|
executeInWorkAreaPara.InWorkAreaEntity.endBit = System.Configuration.ConfigurationManager.AppSettings[startBit].ToString();
|
}
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.endBit))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("未能获取终点位置!");
|
return executeInWorkAreaPara;
|
}
|
}
|
//锁定终点货位
|
OperateResult lockResult = BLLCreator.Create<HH.WMS.BLL.Basic.TN_WM_LOCATION_EXTBLL>().UpdateState(executeInWorkAreaPara.InWorkAreaEntity.endBit, "预入库锁定", "正常");
|
if (lockResult.Success && lockResult.AffectedRows > 0)
|
{
|
AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeInWorkAreaPara.InWorkAreaEntity.endBit);
|
//添加货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeInWorkAreaPara.InWorkAreaEntity.endBit, "正常", "预入库锁定", "入库需要锁定终点货位防止其他资源竞争", executeInWorkAreaPara.InWorkAreaEntity.sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
executeInWorkAreaPara.RollbackLocations.Add(executeInWorkAreaPara.InWorkAreaEntity.endBit);
|
}
|
else
|
{
|
if (!lockResult.Success)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定终点货位" + executeInWorkAreaPara.InWorkAreaEntity.endBit + "失败!详细原因为:" + lockResult.Msg);
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定终点货位" + executeInWorkAreaPara.InWorkAreaEntity.endBit + "失败!详细原因为:SqlExecuteResult影响行数为0");
|
}
|
return executeInWorkAreaPara;
|
}
|
|
return executeInWorkAreaPara;
|
|
|
}
|
|
//public override ExecuteInWorkAreaPara InWorkAreaCreateTask(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
//{
|
// executeInWorkAreaPara.TransportEntity.CN_S_TASK_NO = executeInWorkAreaPara.InWorkAreaEntity.taskNo;
|
// executeInWorkAreaPara.TransportEntity.CN_S_CIR_OBJ = "托盘";
|
// executeInWorkAreaPara.TransportEntity.CN_S_CIR_OBJ_CODE = executeInWorkAreaPara.InWorkAreaEntity.trayCode;
|
// executeInWorkAreaPara.TransportEntity.CN_S_START_BIT = executeInWorkAreaPara.InWorkAreaEntity.startBit;
|
// executeInWorkAreaPara.TransportEntity.CN_S_STATE = Constants.TaskStateList[0];
|
// executeInWorkAreaPara.TransportEntity.CN_N_PRIORITY = executeInWorkAreaPara.InWorkAreaEntity.priority;
|
// executeInWorkAreaPara.TransportEntity.CN_T_CREATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");//DateTime.Now.ToString();
|
// executeInWorkAreaPara.TransportEntity.CN_T_MODIFY = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");//DateTime.Now.ToString();
|
// executeInWorkAreaPara.TransportEntity.CN_S_REMARK = executeInWorkAreaPara.InWorkAreaEntity.remark;
|
// executeInWorkAreaPara.TransportEntity.CN_S_START_AREA = executeInWorkAreaPara.InWorkAreaEntity.startArea;
|
// executeInWorkAreaPara.TransportEntity.CN_S_STOCK_CODE = executeInWorkAreaPara.InWorkAreaEntity.startStock;
|
// executeInWorkAreaPara.TransportEntity.CN_S_EXT3 = executeInWorkAreaPara.InWorkAreaEntity.moduleType;
|
// executeInWorkAreaPara.TransportEntity.CN_S_TASK_TYPE = executeInWorkAreaPara.InWorkAreaEntity.isTransport == "Y" ? "转运" : "入库";
|
// executeInWorkAreaPara.TransportEntity.CN_S_START_AREA_TYPE = executeInWorkAreaPara.StartStockAreaEntity.CN_S_STRUCTURE;
|
// executeInWorkAreaPara.TransportEntity.CN_C_START_IS_CONTROL_QTY = executeInWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY;
|
// executeInWorkAreaPara.TransportEntity.CN_S_START_CONTROL_INV = executeInWorkAreaPara.StartStockAreaEntity.CN_C_IS_INVENTORY;
|
// //TODO EndLocationEntity、EndStockAreaEntity需要赋值
|
// executeInWorkAreaPara.TransportEntity.CN_S_END_BIT = executeInWorkAreaPara.EndLocationEntity.CN_S_LOCATION_CODE;
|
// executeInWorkAreaPara.TransportEntity.CN_S_END_AREA = executeInWorkAreaPara.EndLocationEntity.CN_S_AREA_CODE;
|
// executeInWorkAreaPara.TransportEntity.CN_C_END_IS_CONTROL_QTY = executeInWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY;
|
// executeInWorkAreaPara.TransportEntity.CN_S_END_CONTROL_INV = executeInWorkAreaPara.EndStockAreaEntity.CN_C_IS_INVENTORY;
|
// executeInWorkAreaPara.TransportEntity.CN_S_END_AREA_TYPE = executeInWorkAreaPara.EndStockAreaEntity.CN_S_STRUCTURE;
|
// executeInWorkAreaPara.TransportEntity.CN_S_CREATOR = executeInWorkAreaPara.InWorkAreaEntity.creatorBy;
|
// executeInWorkAreaPara.TransportEntity.CN_S_CREATOR_BY = executeInWorkAreaPara.InWorkAreaEntity.creatorBy;
|
// return executeInWorkAreaPara;
|
//}
|
|
|
#endregion
|
/*
|
#region ExecuteState
|
|
public ExternalResponse OutWorkAreaLj(List<OutWorkAreaEntity> outWorkAreaList, LogPara logPara)
|
{
|
Log.Detail(logPara, "OutWorkArea接口请求参数-隆基:" + JsonConvert.SerializeObject(outWorkAreaList));
|
var response = new ExternalResponse();
|
if (outWorkAreaList == null) return new ExternalResponse { success = false, errMsg = "参数不正确" };
|
for (var i = 0; i < outWorkAreaList.Count; i++)
|
{
|
if (string.IsNullOrEmpty(outWorkAreaList[i].sysName))
|
{
|
outWorkAreaList[i].sysName = "AMS";
|
}
|
Log.Detail(logPara, "循环OutWorkArea接口请求参数-隆基:准备进入OutWorkAreaLj方法");
|
var result = OutWorkAreaLj(outWorkAreaList[i], logPara);
|
if (result.BasisResponse.Success)
|
{
|
response.success = true;
|
response.okList.Add(result.TaskExecuteState.okTask);
|
}
|
else
|
{
|
response.failList.Add(new TaskExecuteState().Error(i, result.BasisResponse.Message).FailTask);
|
if (result.RollLocations.Count > 0)
|
{
|
foreach (string sLocation in result.RollLocations)
|
{
|
BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(sLocation, Constants.Location_State_Normal, "");
|
AutoBomLocationEntity locationModel = CreateDAL<TN_WMS_LOCATIONDAL>().GetModel(sLocation);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(sLocation, "", "正常", "出库请求失败回滚过程中锁定的货位", outWorkAreaList[i].sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
}
|
}
|
}
|
}
|
|
var curResult = response.failList.Any() ? response.Error(null, string.Empty, outWorkAreaList) : response.Ok(null, outWorkAreaList);
|
Log.Detail(logPara, "OutWorkArea接口返回参数:" + curResult);
|
return curResult;
|
}
|
|
public ExecuteOutWorkAreaPara OutWorkAreaLj(OutWorkAreaEntity outWorkAreaEntity, LogPara logPara)
|
{
|
Log.Detail(logPara, "进入隆基OutWorkArea方法");
|
var executeOutWorkAreaPara = new ExecuteOutWorkAreaPara { OutWorkAreaEntity = outWorkAreaEntity };
|
try
|
{
|
|
if (!OutWorkAreaVerifyPara(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
|
if (!OutWorkAreaHandlePara(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
|
//算法计算货位
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.startBit))
|
{
|
OutWorkAreaCalculateLoaction(ref executeOutWorkAreaPara, logPara);//new ExternalOutWorkAreaBLL().CalculateLoaction(executeOutWorkAreaPara);
|
if (!executeOutWorkAreaPara.BasisResponse.Success) return executeOutWorkAreaPara;
|
|
if (!executeOutWorkAreaPara.TransportList.Any())
|
{
|
OutWorkAreaOutAss(ref executeOutWorkAreaPara, logPara);
|
if (!executeOutWorkAreaPara.BasisResponse.Success) return executeOutWorkAreaPara;
|
}
|
|
}
|
else
|
{
|
//创建转运任务
|
var entity = new TN_WM_TRANSPORT_TASKEntity
|
{
|
CN_S_TASK_NO = executeOutWorkAreaPara.OutWorkAreaEntity.taskNo,
|
CN_S_CIR_OBJ = "托盘",
|
CN_S_CIR_OBJ_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.trayCode,
|
CN_S_START_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.startBit,
|
CN_S_START_AREA = executeOutWorkAreaPara.StartStockAreaEntity.CN_S_AREA_CODE,
|
CN_S_STATE = Constants.TaskStateList[0],
|
CN_N_PRIORITY = executeOutWorkAreaPara.OutWorkAreaEntity.priority,
|
CN_S_END_AREA = executeOutWorkAreaPara.OutWorkAreaEntity.endArea,
|
CN_S_END_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.endBit,
|
CN_T_START = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_CREATE = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_MODIFY = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_S_STOCK_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.startStock,
|
CN_S_TASK_TYPE = executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport == "Y" ? "转运" : "出库",
|
CN_S_QTY_INDEX = "1",
|
CN_C_END_IS_CONTROL_QTY = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_END_AREA_TYPE = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STRUCTURE,
|
CN_C_START_IS_CONTROL_QTY = executeOutWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_START_AREA_TYPE = executeOutWorkAreaPara.StartStockAreaEntity.CN_S_STRUCTURE,
|
CN_S_END_CONTROL_INV = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_INVENTORY,
|
CN_S_START_CONTROL_INV = executeOutWorkAreaPara.StartStockAreaEntity.CN_C_IS_INVENTORY,
|
CN_S_REMARK = executeOutWorkAreaPara.OutWorkAreaEntity.remark
|
};
|
executeOutWorkAreaPara.TransportList.Add(entity);
|
}
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
|
{
|
if (!InWorkAreaOutAss(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
}
|
UseTransaction(trans =>
|
{
|
OutWorkAreaCreateTask(ref executeOutWorkAreaPara, logPara);
|
OutWorkAreaProcedure(ref executeOutWorkAreaPara, logPara);
|
if (executeOutWorkAreaPara.OutWorkAreaEntity.needCreateAMSTask == "Y")
|
{
|
OperateResult re = new OtherSysApi().SendAmsCreateTaskLJ(executeOutWorkAreaPara.TransportList[0]);
|
if (!re.Success)
|
{
|
throw new Exception("SendAmsCreateTask异常:" + re.Msg);
|
}
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("OutWorkAreaLj 方法异常:" + JsonConvert.SerializeObject(ex.Message + ex.StackTrace));
|
}
|
return executeOutWorkAreaPara;
|
}
|
|
public override OperateResult CompleteTask(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
// var isControlStockQty = executeStatePara.trayItemMsts.Count > 0;
|
var isControlStockQty = false;
|
Log.Detail(logPara, "isControlStockQty: " + isControlStockQty);
|
|
#region 组合量表参数
|
|
//获取上架量=总量-分配量
|
//var trayInventory = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayInventoryQty(executeStatePara.transportTask.CN_S_TRAY_CODE);
|
var addAreaQty = new List<TN_WM_B_AREA_QTYEntity>();
|
var addStockQty = new List<TN_WM_B_STOCK_QTYEntity>();
|
|
if (isControlStockQty)
|
{
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
foreach (var trayItemDtl in trayItemMst.TrayItemDtlList)
|
{
|
addAreaQty.Add(new TN_WM_B_AREA_QTYEntity()
|
{
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_OWNER = trayItemMst.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),//.CN_S_WEIGHT,//重量 Convert.ToDecimal(trayItemMst.CN_F_INQTY),//trayItemMst.CN_F_QUANTITY * trayItemMst.CN_S_WEIGHT,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_F_PLANNED_QTY = trayItemMst.CN_F_INQTY,
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1
|
});
|
|
addStockQty.Add(new TN_WM_B_STOCK_QTYEntity()
|
{
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_OWNER = trayItemMst.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),//CN_S_WEIGHT,//trayItemMst.CN_F_QUANTITY * trayItemMst.CN_S_WEIGHT,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_F_PLANNED_QTY = trayItemMst.CN_F_INQTY,
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1,
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT
|
});
|
}
|
}
|
Log.Detail(logPara, LogDescribe.Content(addAreaQty));
|
Log.Detail(logPara, LogDescribe.Content(addStockQty));
|
}
|
|
#endregion
|
|
return UseTransaction(trans =>
|
{
|
//更新任务状态
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_T_END = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_STATE = executeStatePara.taskState
|
}, new { executeStatePara.transportTask.CN_S_TASK_NO }, trans);
|
Log.Detail(logPara, "更新任务状态-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO + "状态为:" + executeStatePara.taskState);
|
|
#region 入库 + 转运
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("入库") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
|
if (executeStatePara.startTrayLocation != null)
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
|
#region 下架记录
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
#endregion
|
}
|
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
if (executeStatePara.transportTask.CN_S_EXT2 != "N")
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
Log.Detail(logPara, "添加托盘货位关联,内容:" + LogDescribe.Content(trayLocation));
|
}
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
//终点
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报入库完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
//起点
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y") && executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
// BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, Constants.Location_State_Normal, Constants.Location_State_OutLock, trans);
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报转运完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
|
}
|
|
#endregion
|
|
#region 出库
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("出库"))
|
{
|
if (executeStatePara.startTrayLocation != null)
|
{
|
BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().Delete(executeStatePara.transportTask.CN_S_TRAY_CODE, executeStatePara.transportTask.CN_S_START_BIT, trans, logPara);
|
BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().Delete(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ", trans, logPara);
|
|
//if (isControlStockQty)
|
//{
|
// #region 添加下架记录,降库存
|
|
// CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
// if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
// {
|
// BLLCreator.Create<TN_WM_B_AREA_QTYBLL>().ReduceQtyAndAlloc(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, trans, logPara);
|
// if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
// BLLCreator.Create<TN_WM_B_STOCK_QTYBLL>().ReduceQtyAndAlloc(addStockQty, trans, logPara);
|
// }
|
|
// #endregion
|
//}
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_TASKBLL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans, logPara);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报出库完成", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 上架
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("上架"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
var addResult = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().Add(trayLocation, trans, logPara);
|
Log.Detail(logPara, "添加托盘货位结果:" + JsonConvert.SerializeObject(addResult));
|
//CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
if (isControlStockQty)
|
{
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyReceiveGood);
|
|
#region 添加上架记录,升库存
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
trans.Rollback();
|
return;
|
}
|
|
//启用收货区
|
if (strategyValue.Equals(Constants.Y))
|
{
|
Log.Detail(logPara, "启用收货区!");
|
|
//降低起始库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//升仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
Log.Detail(logPara, "增加仓库量表完成!");
|
}
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,终点货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报上架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "关联!");
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
////更新起点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
//Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报上架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 下架/叫料
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("下架") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("叫料"))
|
{
|
if (executeStatePara.startTrayLocation != null)
|
{
|
BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().Delete(executeStatePara.transportTask.CN_S_TRAY_CODE, executeStatePara.transportTask.CN_S_START_BIT, trans, logPara);
|
if (executeStatePara.endStockArea.CN_C_IS_CONTROL_QTY.Equals("N"))
|
{
|
BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().Delete(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ", trans, logPara);
|
}
|
|
if (isControlStockQty)
|
{
|
#region 添加下架记录,降库存
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyDeliverGood);
|
|
if (strategyValue.Equals(Constants.Y))
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
//增加终点库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_B_AREA_QTYBLL>().ReduceQtyAndAlloc(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, trans, logPara);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
BLLCreator.Create<TN_WM_B_STOCK_QTYBLL>().ReduceQtyAndAlloc(addStockQty, trans, logPara);
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_TASKBLL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans, logPara);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报下架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,结束货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT });
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报下架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 空托入(上架)
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托入"))
|
{
|
Log.Detail(logPara, "开始执行空托入!");
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
Log.Detail(logPara, "endTrayLocation: " + JsonConvert.SerializeObject(executeStatePara.endTrayLocation));
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
if (isControlStockQty)
|
{
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyReceiveGood);
|
|
#region 添加上架记录,升库存
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
trans.Rollback();
|
return;
|
}
|
|
//启用收货区
|
if (strategyValue.Equals(Constants.Y))
|
{
|
Log.Detail(logPara, "启用收货区!");
|
|
//降低起始库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//升仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
Log.Detail(logPara, "增加仓库量表完成!");
|
}
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,终点货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT });
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报上架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
////更新起点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
//Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报上架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
#endregion
|
|
#region 空托出(下架)
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托出"))
|
{
|
Log.Detail(logPara, "开始执行空托出!");
|
Log.Detail(logPara, "startTrayLocation: " + JsonConvert.SerializeObject(executeStatePara.startTrayLocation));
|
if (executeStatePara.startTrayLocation != null)
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
|
////删除托盘产品关联
|
//CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().Delete(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ");
|
//Log.Detail(logPara, "删除当前任务的托盘物料关联!");
|
|
if (isControlStockQty)
|
{
|
#region 添加下架记录,降库存
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyDeliverGood);
|
|
if (strategyValue.Equals(Constants.Y))
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
//增加终点库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//降低仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().ReduceStockQty(addStockQty, trans);
|
Log.Detail(logPara, "降低仓库量表完成!");
|
}
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起始货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
////更新起点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
//Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报下架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
////添加托盘货位
|
//CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "空", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,结束货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT });
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报下架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
#endregion
|
|
#region 移库
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
|
if (executeStatePara.startTrayLocation != null)
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
}
|
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
Log.Detail(logPara, "添加托盘货位关联,内容:" + LogDescribe.Content(trayLocation));
|
|
if (isControlStockQty)
|
{
|
#region 下架记录
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
#endregion
|
|
#region 上架记录
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
Log.Detail(logPara, "终点库区" + executeStatePara.transportTask.CN_S_END_AREA + "不管控库存!executeStatePara.transportTask.CN_S_END_CONTROL_INV:" + executeStatePara.transportTask.CN_S_END_CONTROL_INV);
|
trans.Rollback();
|
return;
|
}
|
|
#endregion
|
|
#region 库存
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y")) //降低起点库存
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQtyAndAllocQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y")) //增加终点库存
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
#endregion
|
}
|
|
//终点
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报入库完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
//起点
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报转运完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
});
|
}
|
public override void CompleteTaskDownHistory(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var downHis = new List<TN_WM_DOWN_HISTORYEntity>();
|
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
downHis.Add(new TN_WM_DOWN_HISTORYEntity
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_TRAY_CODE = trayItemMst.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = trayItemMst.CN_S_TRAY_GRID,
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_LOT_NO,
|
CN_F_QUANTITY = trayItemMst.CN_F_QUANTITY,//CN_S_WEIGHT,//.CN_F_QUANTITY,
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_START_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_OWNER = "",
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
|
CN_S_CREATOR = executeStatePara.transportTask.CN_S_CREATOR,
|
CN_S_CREATOR_BY = executeStatePara.transportTask.CN_S_CREATOR_BY,
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_S_OP_FROM = "任务完成-" + executeStatePara.transportTask.CN_S_TASK_TYPE,
|
CN_S_EXT1 = trayItemMst.CN_S_UNIQUE_CODE,
|
CN_S_EXT2 = executeStatePara.transportTask.CN_S_EXT1,
|
CN_S_LOT_NO = trayItemMst.CN_S_LOT_NO,
|
CN_S_FIGURE_NO = trayItemMst.CN_S_FIGURE_NO
|
});
|
}
|
//下架记录
|
if (downHis.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
Log.Detail(logPara, "添加下架记录,内容:" + LogDescribe.Content(downHis));
|
}
|
}
|
|
#endregion
|
|
public override ExecuteOutWorkAreaPara OutWorkArea(OutWorkAreaEntity outWorkAreaEntity, LogPara logPara)
|
{
|
var executeOutWorkAreaPara = new ExecuteOutWorkAreaPara { OutWorkAreaEntity = outWorkAreaEntity };
|
try
|
{
|
|
if (!OutWorkAreaVerifyPara(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
|
if (!OutWorkAreaHandlePara(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
|
//算法计算货位
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.startBit))
|
{
|
OutWorkAreaCalculateLoaction(ref executeOutWorkAreaPara, logPara);
|
if (!executeOutWorkAreaPara.BasisResponse.Success) return executeOutWorkAreaPara;
|
|
if (!executeOutWorkAreaPara.TransportList.Any())
|
{
|
OutWorkAreaOutAss(ref executeOutWorkAreaPara, logPara);
|
if (!executeOutWorkAreaPara.BasisResponse.Success) return executeOutWorkAreaPara;
|
}
|
|
}
|
else
|
{
|
//创建转运任务
|
var entity = new TN_WM_TRANSPORT_TASKEntity
|
{
|
CN_S_TASK_NO = executeOutWorkAreaPara.OutWorkAreaEntity.taskNo,
|
CN_S_CIR_OBJ = "托盘",
|
CN_S_CIR_OBJ_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.trayCode,
|
CN_S_START_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.startBit,
|
CN_S_START_AREA = executeOutWorkAreaPara.StartStockAreaEntity.CN_S_AREA_CODE,
|
CN_S_STATE = Constants.TaskStateList[0],
|
CN_N_PRIORITY = executeOutWorkAreaPara.OutWorkAreaEntity.priority,
|
CN_S_END_AREA = executeOutWorkAreaPara.OutWorkAreaEntity.endArea,
|
CN_S_END_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.endBit,
|
CN_T_START = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_CREATE = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_MODIFY = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_S_STOCK_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.startStock,
|
CN_S_TASK_TYPE = executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport == "Y" ? "转运" : "出库",
|
CN_S_QTY_INDEX = "1",
|
CN_C_END_IS_CONTROL_QTY = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_END_AREA_TYPE = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STRUCTURE,
|
CN_C_START_IS_CONTROL_QTY = executeOutWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_START_AREA_TYPE = executeOutWorkAreaPara.StartStockAreaEntity.CN_S_STRUCTURE,
|
CN_S_END_CONTROL_INV = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_INVENTORY,
|
CN_S_START_CONTROL_INV = executeOutWorkAreaPara.StartStockAreaEntity.CN_C_IS_INVENTORY
|
};
|
executeOutWorkAreaPara.TransportList.Add(entity);
|
}
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
|
{
|
if (!InWorkAreaOutAss(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
}
|
UseTransaction(trans =>
|
{
|
OutWorkAreaCreateTask(ref executeOutWorkAreaPara, logPara);
|
OutWorkAreaProcedure(ref executeOutWorkAreaPara, logPara);
|
if (executeOutWorkAreaPara.OutWorkAreaEntity.needCreateAMSTask == "Y")
|
{
|
OperateResult re = new OtherSysApi().SendAmsCreateTaskLJ(executeOutWorkAreaPara.TransportList[0]);
|
if (!re.Success)
|
{
|
throw new Exception("SendAmsCreateTask异常:" + re.Msg);
|
}
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("OutWorkArea 方法异常:" + JsonConvert.SerializeObject(ex.Message + ex.StackTrace));
|
}
|
return executeOutWorkAreaPara;
|
}
|
|
*/
|
}
|
}
|